diff --git a/src/Sema.zig b/src/Sema.zig index 08f3b59661..78d34a9f30 100644 --- 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 index 7849c65582..42c3dca3f0 100644 --- 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 new file mode 100644 index 0000000000..6941a20e09 --- /dev/null +++ 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); +}