Changeset 50e8125
- Timestamp:
 - Apr 9, 2025, 6:38:09 PM (7 months ago)
 - Branches:
 - master
 - Children:
 - 119889f, d914750
 - Parents:
 - 51b72bf5 (diff), 52eb7b7 (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
 
- 
          
  doc/theses/fangren_yu_MMath/resolution.tex (modified) (1 diff)
 
 
Legend:
- Unmodified
 - Added
 - Removed
 
- 
      
doc/theses/fangren_yu_MMath/resolution.tex
r51b72bf5 r50e8125 369 369 In C semantics, this example is unambiguously upcasting 32 to @unsigned long long@, performing the shift, then downcasting the result to @unsigned@, at cost (1, 0, 3, 1, 0, 0, 0). 370 370 If ascription were allowed to be a first-class interpretation of a cast expression, it would be cheaper to select the @unsigned@ interpretation of @?>>?@ by downcasting @x@ to @unsigned@ and upcasting 32 to @unsigned@, at a total cost of (1, 0, 1, 1, 0, 0, 0). 371 \PAB{[Note, this alternate interpretation is semantically incorrect, because the downcasting \lstinline{x} to from \lstinline{long long} to \lstinline{unsigned} is unsafe (truncation).]} 371 [Ed., both approached have an unsafe cast from \lstinline{long long} to \lstinline{unsigned} (truncation), the difference is when the truncation occurs, \ie before or after the shift, potentially generating different results.] 372 372 However, this break from C semantics is not backwards compatible, so to maintain C compatibility, the \CFA resolver selects the lowest-cost interpretation of the cast argument for which a conversion or coercion to the target type exists (upcasting to @unsigned long long@ in the example above, due to the lack of unsafe downcasts), using the cost of the conversion itself only as a tie-breaker.~\cite[pp.~46-47]{Moss19} 373 373 \end{cquote}  
  Note:
 See   TracChangeset
 for help on using the changeset viewer.