commit be9a4a1f976ea924f0cbe33f7bb869c450fd823a (tree)
parent 1e963053d0ff67361b587b046a917375e963d5e9
Author: Veikka Tuominen <git@vexu.eu>
Date: Mon, 17 Oct 2022 13:39:40 +0300
Sema: handle noreturn in boolBr
Closes #13112
Diffstat:
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/Sema.zig b/src/Sema.zig
@@ -15652,7 +15652,9 @@ fn zirBoolBr(
_ = try lhs_block.addBr(block_inst, lhs_result);
const rhs_result = try sema.resolveBody(rhs_block, body, inst);
- _ = try rhs_block.addBr(block_inst, rhs_result);
+ if (!sema.typeOf(rhs_result).isNoReturn()) {
+ _ = try rhs_block.addBr(block_inst, rhs_result);
+ }
return finishCondBr(sema, parent_block, &child_block, &then_block, &else_block, lhs, block_inst);
}
diff --git a/test/behavior.zig b/test/behavior.zig
@@ -103,6 +103,7 @@ test {
_ = @import("behavior/bugs/12972.zig");
_ = @import("behavior/bugs/12984.zig");
_ = @import("behavior/bugs/13068.zig");
+ _ = @import("behavior/bugs/13112.zig");
_ = @import("behavior/bugs/13128.zig");
_ = @import("behavior/byteswap.zig");
_ = @import("behavior/byval_arg_var.zig");
diff --git a/test/behavior/bugs/13112.zig b/test/behavior/bugs/13112.zig
@@ -0,0 +1,7 @@
+fn nice(a: u32, b: u32) bool {
+ return a == 5 or b == 2 or @panic("oh no");
+}
+
+test {
+ _ = nice(2, 2);
+}