diff --git a/src/liveness.zig b/src/liveness.zig index 7b5ef8dc35..0d759f8312 100644 --- a/src/liveness.zig +++ b/src/liveness.zig @@ -189,7 +189,8 @@ fn analyzeInst( for (case_tables) |*ct_inner, j| { if (i == j) continue; if (!ct_inner.contains(case_death)) { - try case_deaths[i].append(case_death); + // instruction is not referenced in this case + try case_deaths[j].append(case_death); } } // undo resetting the table diff --git a/test/stage2/test.zig b/test/stage2/test.zig index 7e1de126b6..51bde87ab0 100644 --- a/test/stage2/test.zig +++ b/test/stage2/test.zig @@ -974,6 +974,43 @@ pub fn addCases(ctx: *TestContext) !void { , "hello\nhello\nhello\nhello\nhello\n", ); + + // comptime switch + + // Basic for loop + case.addCompareOutput( + \\pub export fn _start() noreturn { + \\ assert(foo() == 1); + \\ exit(); + \\} + \\ + \\fn foo() u32 { + \\ const a: comptime_int = 1; + \\ var b: u32 = 0; + \\ switch (a) { + \\ 1 => b = 1, + \\ 2 => b = 2, + \\ else => unreachable, + \\ } + \\ return b; + \\} + \\ + \\pub fn assert(ok: bool) void { + \\ if (!ok) unreachable; // assertion failure + \\} + \\ + \\fn exit() noreturn { + \\ asm volatile ("syscall" + \\ : + \\ : [number] "{rax}" (231), + \\ [arg1] "{rdi}" (0) + \\ : "rcx", "r11", "memory" + \\ ); + \\ unreachable; + \\} + , + "", + ); } {