From 12d18a36e5eed4b0898e93df2fd13b56061049b3 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 24 Mar 2021 20:58:38 -0700 Subject: [PATCH] stage2: enable passing tests --- test/stage2/test.zig | 370 +++++++++++++++++++++---------------------- 1 file changed, 185 insertions(+), 185 deletions(-) diff --git a/test/stage2/test.zig b/test/stage2/test.zig index 372f3ef958..a7ef7d98b6 100644 --- a/test/stage2/test.zig +++ b/test/stage2/test.zig @@ -622,197 +622,197 @@ pub fn addCases(ctx: *TestContext) !void { ); // Labeled blocks (no conditional branch) - //case.addCompareOutput( - // \\export fn _start() noreturn { - // \\ assert(add(3, 4) == 20); - // \\ - // \\ exit(); - // \\} - // \\ - // \\fn add(a: u32, b: u32) u32 { - // \\ const x: u32 = blk: { - // \\ const c = a + b; // 7 - // \\ const d = a + c; // 10 - // \\ const e = d + b; // 14 - // \\ break :blk e; - // \\ }; - // \\ const y = x + a; // 17 - // \\ const z = y + a; // 20 - // \\ return z; - // \\} - // \\ - // \\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; - // \\} - //, - // "", - //); + case.addCompareOutput( + \\export fn _start() noreturn { + \\ assert(add(3, 4) == 20); + \\ + \\ exit(); + \\} + \\ + \\fn add(a: u32, b: u32) u32 { + \\ const x: u32 = blk: { + \\ const c = a + b; // 7 + \\ const d = a + c; // 10 + \\ const e = d + b; // 14 + \\ break :blk e; + \\ }; + \\ const y = x + a; // 17 + \\ const z = y + a; // 20 + \\ return z; + \\} + \\ + \\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; + \\} + , + "", + ); // This catches a possible bug in the logic for re-using dying operands. - //case.addCompareOutput( - // \\export fn _start() noreturn { - // \\ assert(add(3, 4) == 116); - // \\ - // \\ exit(); - // \\} - // \\ - // \\fn add(a: u32, b: u32) u32 { - // \\ const x: u32 = blk: { - // \\ const c = a + b; // 7 - // \\ const d = a + c; // 10 - // \\ const e = d + b; // 14 - // \\ const f = d + e; // 24 - // \\ const g = e + f; // 38 - // \\ const h = f + g; // 62 - // \\ const i = g + h; // 100 - // \\ const j = i + d; // 110 - // \\ break :blk j; - // \\ }; - // \\ const y = x + a; // 113 - // \\ const z = y + a; // 116 - // \\ return z; - // \\} - // \\ - // \\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; - // \\} - //, - // "", - //); + case.addCompareOutput( + \\export fn _start() noreturn { + \\ assert(add(3, 4) == 116); + \\ + \\ exit(); + \\} + \\ + \\fn add(a: u32, b: u32) u32 { + \\ const x: u32 = blk: { + \\ const c = a + b; // 7 + \\ const d = a + c; // 10 + \\ const e = d + b; // 14 + \\ const f = d + e; // 24 + \\ const g = e + f; // 38 + \\ const h = f + g; // 62 + \\ const i = g + h; // 100 + \\ const j = i + d; // 110 + \\ break :blk j; + \\ }; + \\ const y = x + a; // 113 + \\ const z = y + a; // 116 + \\ return z; + \\} + \\ + \\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; + \\} + , + "", + ); // Spilling registers to the stack. - //case.addCompareOutput( - // \\export fn _start() noreturn { - // \\ assert(add(3, 4) == 791); - // \\ - // \\ exit(); - // \\} - // \\ - // \\fn add(a: u32, b: u32) u32 { - // \\ const x: u32 = blk: { - // \\ const c = a + b; // 7 - // \\ const d = a + c; // 10 - // \\ const e = d + b; // 14 - // \\ const f = d + e; // 24 - // \\ const g = e + f; // 38 - // \\ const h = f + g; // 62 - // \\ const i = g + h; // 100 - // \\ const j = i + d; // 110 - // \\ const k = i + j; // 210 - // \\ const l = k + c; // 217 - // \\ const m = l + d; // 227 - // \\ const n = m + e; // 241 - // \\ const o = n + f; // 265 - // \\ const p = o + g; // 303 - // \\ const q = p + h; // 365 - // \\ const r = q + i; // 465 - // \\ const s = r + j; // 575 - // \\ const t = s + k; // 785 - // \\ break :blk t; - // \\ }; - // \\ const y = x + a; // 788 - // \\ const z = y + a; // 791 - // \\ return z; - // \\} - // \\ - // \\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; - // \\} - //, - // "", - //); + case.addCompareOutput( + \\export fn _start() noreturn { + \\ assert(add(3, 4) == 791); + \\ + \\ exit(); + \\} + \\ + \\fn add(a: u32, b: u32) u32 { + \\ const x: u32 = blk: { + \\ const c = a + b; // 7 + \\ const d = a + c; // 10 + \\ const e = d + b; // 14 + \\ const f = d + e; // 24 + \\ const g = e + f; // 38 + \\ const h = f + g; // 62 + \\ const i = g + h; // 100 + \\ const j = i + d; // 110 + \\ const k = i + j; // 210 + \\ const l = k + c; // 217 + \\ const m = l + d; // 227 + \\ const n = m + e; // 241 + \\ const o = n + f; // 265 + \\ const p = o + g; // 303 + \\ const q = p + h; // 365 + \\ const r = q + i; // 465 + \\ const s = r + j; // 575 + \\ const t = s + k; // 785 + \\ break :blk t; + \\ }; + \\ const y = x + a; // 788 + \\ const z = y + a; // 791 + \\ return z; + \\} + \\ + \\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; + \\} + , + "", + ); // Reusing the registers of dead operands playing nicely with conditional branching. - //case.addCompareOutput( - // \\export fn _start() noreturn { - // \\ assert(add(3, 4) == 791); - // \\ assert(add(4, 3) == 79); - // \\ - // \\ exit(); - // \\} - // \\ - // \\fn add(a: u32, b: u32) u32 { - // \\ const x: u32 = if (a < b) blk: { - // \\ const c = a + b; // 7 - // \\ const d = a + c; // 10 - // \\ const e = d + b; // 14 - // \\ const f = d + e; // 24 - // \\ const g = e + f; // 38 - // \\ const h = f + g; // 62 - // \\ const i = g + h; // 100 - // \\ const j = i + d; // 110 - // \\ const k = i + j; // 210 - // \\ const l = k + c; // 217 - // \\ const m = l + d; // 227 - // \\ const n = m + e; // 241 - // \\ const o = n + f; // 265 - // \\ const p = o + g; // 303 - // \\ const q = p + h; // 365 - // \\ const r = q + i; // 465 - // \\ const s = r + j; // 575 - // \\ const t = s + k; // 785 - // \\ break :blk t; - // \\ } else blk: { - // \\ const t = b + b + a; // 10 - // \\ const c = a + t; // 14 - // \\ const d = c + t; // 24 - // \\ const e = d + t; // 34 - // \\ const f = e + t; // 44 - // \\ const g = f + t; // 54 - // \\ const h = c + g; // 68 - // \\ break :blk h + b; // 71 - // \\ }; - // \\ const y = x + a; // 788, 75 - // \\ const z = y + a; // 791, 79 - // \\ return z; - // \\} - // \\ - // \\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; - // \\} - //, - // "", - //); + case.addCompareOutput( + \\export fn _start() noreturn { + \\ assert(add(3, 4) == 791); + \\ assert(add(4, 3) == 79); + \\ + \\ exit(); + \\} + \\ + \\fn add(a: u32, b: u32) u32 { + \\ const x: u32 = if (a < b) blk: { + \\ const c = a + b; // 7 + \\ const d = a + c; // 10 + \\ const e = d + b; // 14 + \\ const f = d + e; // 24 + \\ const g = e + f; // 38 + \\ const h = f + g; // 62 + \\ const i = g + h; // 100 + \\ const j = i + d; // 110 + \\ const k = i + j; // 210 + \\ const l = k + c; // 217 + \\ const m = l + d; // 227 + \\ const n = m + e; // 241 + \\ const o = n + f; // 265 + \\ const p = o + g; // 303 + \\ const q = p + h; // 365 + \\ const r = q + i; // 465 + \\ const s = r + j; // 575 + \\ const t = s + k; // 785 + \\ break :blk t; + \\ } else blk: { + \\ const t = b + b + a; // 10 + \\ const c = a + t; // 14 + \\ const d = c + t; // 24 + \\ const e = d + t; // 34 + \\ const f = e + t; // 44 + \\ const g = f + t; // 54 + \\ const h = c + g; // 68 + \\ break :blk h + b; // 71 + \\ }; + \\ const y = x + a; // 788, 75 + \\ const z = y + a; // 791, 79 + \\ return z; + \\} + \\ + \\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; + \\} + , + "", + ); // Character literals and multiline strings. case.addCompareOutput(