mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
We were mistakenly using the signed builtins, which produce the same lowering for add/multiply right now, but don't for division and modulus. When manually flipping SignedOverflowIsUB on, the signed version of add gains the nsw (no signed wrap) flag, while the unsigned version (correctly after this change) does not: ``` // CHECK:STDOUT: define i32 @_Cadd_i32.Main(i32 %a, i32 %b) !dbg !4 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %int.sadd = add nsw i32 %a, %b, !dbg !7 // CHECK:STDOUT: ret i32 %int.sadd, !dbg !8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: define i32 @_Cadd_u32.Main(i32 %a, i32 %b) !dbg !9 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %int.uadd = add i32 %a, %b, !dbg !10 // CHECK:STDOUT: ret i32 %int.uadd, !dbg !11 // CHECK:STDOUT: } ```