From be9a4a1f976ea924f0cbe33f7bb869c450fd823a Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Mon, 17 Oct 2022 13:39:40 +0300 Subject: [PATCH] Sema: handle noreturn in boolBr Closes #13112 --- src/Sema.zig | 4 +++- test/behavior.zig | 1 + test/behavior/bugs/13112.zig | 7 +++++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/behavior/bugs/13112.zig 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); +}