From 22ec5e085914d9fd7b17a28a8d3ad01258f3ad03 Mon Sep 17 00:00:00 2001 From: Vexu Date: Fri, 30 Oct 2020 15:57:18 +0200 Subject: [PATCH] stage2: fix typo in liveness; add comptime switch test --- src/liveness.zig | 3 ++- test/stage2/test.zig | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/liveness.zig b/src/liveness.zig index 7b5ef8dc3..0d759f831 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 7e1de126b..51bde87ab 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; + \\} + , + "", + ); } {