diff --git a/src/Sema.zig b/src/Sema.zig index 08f3b59661485eb2a9335cb7a61ae6c690264f00..78d34a9f30f364055cb852bb2301125892ea8862 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 7849c6558210816b86ca573a7d98495ec941d60f..42c3dca3f08a8472561c813728f6eff05b7e7f49 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 0000000000000000000000000000000000000000..6941a20e099cf8e158e6078e20bd45fa72a8e7d1 --- /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); +}