Commit be26c3bf4e

LemonBoy <thatlemon@gmail.com>
2020-11-01 22:14:08
stage1: Fix *WithOverflow intrinsics with u0 values
Closes #5369
1 parent ad9655d
Changed files (2)
src
stage1
test
stage1
behavior
src/stage1/ir.cpp
@@ -28880,6 +28880,10 @@ static IrInstGen *ir_analyze_instruction_overflow_op(IrAnalyze *ira, IrInstSrcOv
     if (type_is_invalid(casted_result_ptr->value->type))
         return ira->codegen->invalid_inst_gen;
 
+    // Don't write anything to the result pointer.
+    if (dest_type->data.integral.bit_count == 0)
+        return ir_const_bool(ira, &instruction->base.base, false);
+
     if (instr_is_comptime(casted_op1) &&
         instr_is_comptime(casted_op2) &&
         instr_is_comptime(casted_result_ptr))
test/stage1/behavior/math.zig
@@ -109,6 +109,14 @@ test "@shlWithOverflow" {
     expect(result == 0b1011111111111100);
 }
 
+test "@*WithOverflow with u0 values" {
+    var result: u0 = undefined;
+    expect(!@addWithOverflow(u0, 0, 0, &result));
+    expect(!@subWithOverflow(u0, 0, 0, &result));
+    expect(!@mulWithOverflow(u0, 0, 0, &result));
+    expect(!@shlWithOverflow(u0, 0, 0, &result));
+}
+
 test "@clz" {
     testClz();
     comptime testClz();