Changeset 10a9479d for src/ResolvExpr/ConversionCost.cpp
- Timestamp:
- Nov 23, 2024, 8:28:37 PM (11 months ago)
- Branches:
- master
- Children:
- 956b389
- Parents:
- b006c51e (diff), de7b7a5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/ConversionCost.cpp
rb006c51e r10a9479d 250 250 newSrc = new ast::BasicType( ast::BasicKind::UnsignedInt ); 251 251 } 252 if (dstAsRef->base->is_const() ) { 253 auto cvtCost = conversionCost(newSrc, dstAsRef->base, srcIsLvalue, symtab, env) ; 254 if (cvtCost == Cost::zero) { // exact match, may use a lvalue src 255 if ( srcIsLvalue ) { 256 if ( src->qualifiers == dstAsRef->base->qualifiers ) { 257 return Cost::reference; 258 } else if ( src->qualifiers < dstAsRef->base->qualifiers ) { 259 return Cost::safe; 260 } else { 261 return Cost::unsafe; 262 } 263 } 264 else { 265 return Cost::reference; 266 } 267 } 268 else { // not exact match, conversion is needed so lvalueness of src does not matter 269 return cvtCost + Cost::reference; 270 } 271 } 252 272 if ( typesCompatibleIgnoreQualifiers( newSrc, dstAsRef->base, env ) ) { 253 273 if ( srcIsLvalue ) { … … 259 279 return Cost::unsafe; 260 280 } 261 } else if ( dstAsRef->base->is_const() ) { 262 return Cost::safe; 263 } else { 281 } else { // rvalue-to-NC-ref conversion 264 282 return Cost::unsafe; 265 283 }
Note:
See TracChangeset
for help on using the changeset viewer.