diff --git a/src/Sema.zig b/src/Sema.zig index 81331f3ccc..6672ba5b36 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -13041,8 +13041,10 @@ fn analyzeSwitchRuntimeBlock( sema.air_extra.appendSliceAssumeCapacity(@ptrCast(cases_extra.items)); sema.air_extra.appendSliceAssumeCapacity(@ptrCast(else_body)); + const has_any_continues = spa.operand == .loop and child_block.label.?.merges.extra_insts.items.len > 0; + return try child_block.addInst(.{ - .tag = if (spa.operand == .loop) .loop_switch_br else .switch_br, + .tag = if (has_any_continues) .loop_switch_br else .switch_br, .data = .{ .pl_op = .{ .operand = operand, .payload = payload_index, diff --git a/test/cases/discard_labeled_switch_tag.zig b/test/cases/discard_labeled_switch_tag.zig new file mode 100644 index 0000000000..63aa304b40 --- /dev/null +++ b/test/cases/discard_labeled_switch_tag.zig @@ -0,0 +1,12 @@ +// https://github.com/ziglang/zig/issues/24323 + +export fn f() void { + const x: u32 = 0; + sw: switch (x) { + else => if (false) continue :sw undefined, + } +} + +// compile +// backend=stage2,llvm +// target=native