Commit ca4ee9ae73

amp-59 <114923809+amp-59@users.noreply.github.com>
2024-01-03 08:34:24
Sema: Added logic to avoid unchecked operations calling `preparePanicId` (#18416)
Fixes #18415
1 parent 60958d1
Changed files (2)
src/Sema.zig
@@ -16019,9 +16019,12 @@ fn analyzeArithmetic(
     };
 
     try sema.requireRuntimeBlock(block, src, runtime_src);
+
     if (block.wantSafety() and want_safety and scalar_tag == .Int) {
         if (mod.backendSupportsFeature(.safety_checked_instructions)) {
-            _ = try sema.preparePanicId(block, .integer_overflow);
+            if (air_tag != air_tag_safe) {
+                _ = try sema.preparePanicId(block, .integer_overflow);
+            }
             return block.addBinOp(air_tag_safe, casted_lhs, casted_rhs);
         } else {
             const maybe_op_ov: ?Air.Inst.Tag = switch (air_tag) {
test/cases/no_compile_panic_for_unchecked_arith.zig
@@ -0,0 +1,16 @@
+pub const panic = @compileError("");
+
+export fn entry() usize {
+    var x: usize = 0;
+    x +%= 1;
+    x -%= 1;
+    x *%= 2;
+    x +|= 1;
+    x -|= 1;
+    x *|= 2;
+    return x;
+}
+
+// compile
+// output_mode=Obj
+// backend=stage2,llvm