diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-05-01 17:35:52 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-01 17:35:52 -0400 |
| commit | 3386bb896d071eef4ff571fac399e18b2270a382 (patch) | |
| tree | c3e597506a6f5a41269acdd386fd87bd473cdaa9 /test | |
| parent | 94b0d0e80242563f4ad7ad41e3c0f5193a60b70c (diff) | |
| parent | ec6ef86219578822fd32bbe2e5eb83b24ddfdca6 (diff) | |
| download | zig-3386bb896d071eef4ff571fac399e18b2270a382.tar.gz zig-3386bb896d071eef4ff571fac399e18b2270a382.zip | |
Merge pull request #5192 from ziglang/stage2-tests
add ZIR compare output test case to test suite
Diffstat (limited to 'test')
| -rw-r--r-- | test/stage2/compare_output.zig | 41 | ||||
| -rw-r--r-- | test/stage2/compile_errors.zig | 103 | ||||
| -rw-r--r-- | test/stage2/ir.zig | 54 | ||||
| -rw-r--r-- | test/stage2/test.zig | 1 | ||||
| -rw-r--r-- | test/stage2/zir.zig | 107 |
5 files changed, 183 insertions, 123 deletions
diff --git a/test/stage2/compare_output.zig b/test/stage2/compare_output.zig index 443ed7a0ee..1f289c2762 100644 --- a/test/stage2/compare_output.zig +++ b/test/stage2/compare_output.zig @@ -2,24 +2,27 @@ const std = @import("std"); const TestContext = @import("../../src-self-hosted/test.zig").TestContext; pub fn addCases(ctx: *TestContext) !void { - // hello world - try ctx.testCompareOutputLibC( - \\extern fn puts([*]const u8) void; - \\pub export fn main() c_int { - \\ puts("Hello, world!"); - \\ return 0; - \\} - , "Hello, world!" ++ std.cstr.line_sep); + // TODO: re-enable these tests. + // https://github.com/ziglang/zig/issues/1364 - // function calling another function - try ctx.testCompareOutputLibC( - \\extern fn puts(s: [*]const u8) void; - \\pub export fn main() c_int { - \\ return foo("OK"); - \\} - \\fn foo(s: [*]const u8) c_int { - \\ puts(s); - \\ return 0; - \\} - , "OK" ++ std.cstr.line_sep); + //// hello world + //try ctx.testCompareOutputLibC( + // \\extern fn puts([*]const u8) void; + // \\pub export fn main() c_int { + // \\ puts("Hello, world!"); + // \\ return 0; + // \\} + //, "Hello, world!" ++ std.cstr.line_sep); + + //// function calling another function + //try ctx.testCompareOutputLibC( + // \\extern fn puts(s: [*]const u8) void; + // \\pub export fn main() c_int { + // \\ return foo("OK"); + // \\} + // \\fn foo(s: [*]const u8) c_int { + // \\ puts(s); + // \\ return 0; + // \\} + //, "OK" ++ std.cstr.line_sep); } diff --git a/test/stage2/compile_errors.zig b/test/stage2/compile_errors.zig index 377d060056..9b8dcd91c4 100644 --- a/test/stage2/compile_errors.zig +++ b/test/stage2/compile_errors.zig @@ -1,54 +1,57 @@ const TestContext = @import("../../src-self-hosted/test.zig").TestContext; pub fn addCases(ctx: *TestContext) !void { - try ctx.testCompileError( - \\export fn entry() void {} - \\export fn entry() void {} - , "1.zig", 2, 8, "exported symbol collision: 'entry'"); - - try ctx.testCompileError( - \\fn() void {} - , "1.zig", 1, 1, "missing function name"); - - try ctx.testCompileError( - \\comptime { - \\ return; - \\} - , "1.zig", 2, 5, "return expression outside function definition"); - - try ctx.testCompileError( - \\export fn entry() void { - \\ defer return; - \\} - , "1.zig", 2, 11, "cannot return from defer expression"); - - try ctx.testCompileError( - \\export fn entry() c_int { - \\ return 36893488147419103232; - \\} - , "1.zig", 2, 12, "integer value '36893488147419103232' cannot be stored in type 'c_int'"); - - try ctx.testCompileError( - \\comptime { - \\ var a: *align(4) align(4) i32 = 0; - \\} - , "1.zig", 2, 22, "Extra align qualifier"); - - try ctx.testCompileError( - \\comptime { - \\ var b: *const const i32 = 0; - \\} - , "1.zig", 2, 19, "Extra align qualifier"); - - try ctx.testCompileError( - \\comptime { - \\ var c: *volatile volatile i32 = 0; - \\} - , "1.zig", 2, 22, "Extra align qualifier"); - - try ctx.testCompileError( - \\comptime { - \\ var d: *allowzero allowzero i32 = 0; - \\} - , "1.zig", 2, 23, "Extra align qualifier"); + // TODO: re-enable these tests. + // https://github.com/ziglang/zig/issues/1364 + + //try ctx.testCompileError( + // \\export fn entry() void {} + // \\export fn entry() void {} + //, "1.zig", 2, 8, "exported symbol collision: 'entry'"); + + //try ctx.testCompileError( + // \\fn() void {} + //, "1.zig", 1, 1, "missing function name"); + + //try ctx.testCompileError( + // \\comptime { + // \\ return; + // \\} + //, "1.zig", 2, 5, "return expression outside function definition"); + + //try ctx.testCompileError( + // \\export fn entry() void { + // \\ defer return; + // \\} + //, "1.zig", 2, 11, "cannot return from defer expression"); + + //try ctx.testCompileError( + // \\export fn entry() c_int { + // \\ return 36893488147419103232; + // \\} + //, "1.zig", 2, 12, "integer value '36893488147419103232' cannot be stored in type 'c_int'"); + + //try ctx.testCompileError( + // \\comptime { + // \\ var a: *align(4) align(4) i32 = 0; + // \\} + //, "1.zig", 2, 22, "Extra align qualifier"); + + //try ctx.testCompileError( + // \\comptime { + // \\ var b: *const const i32 = 0; + // \\} + //, "1.zig", 2, 19, "Extra align qualifier"); + + //try ctx.testCompileError( + // \\comptime { + // \\ var c: *volatile volatile i32 = 0; + // \\} + //, "1.zig", 2, 22, "Extra align qualifier"); + + //try ctx.testCompileError( + // \\comptime { + // \\ var d: *allowzero allowzero i32 = 0; + // \\} + //, "1.zig", 2, 23, "Extra align qualifier"); } diff --git a/test/stage2/ir.zig b/test/stage2/ir.zig deleted file mode 100644 index 450d8fa102..0000000000 --- a/test/stage2/ir.zig +++ /dev/null @@ -1,54 +0,0 @@ -test "hello world IR" { - exeCmp( - \\@0 = str("Hello, world!\n") - \\@1 = primitive(void) - \\@2 = primitive(usize) - \\@3 = fntype([], @1, cc=Naked) - \\@4 = int(0) - \\@5 = int(1) - \\@6 = int(231) - \\@7 = str("len") - \\ - \\@8 = fn(@3, { - \\ %0 = as(@2, @5) ; SYS_write - \\ %1 = as(@2, @5) ; STDOUT_FILENO - \\ %2 = ptrtoint(@0) ; msg ptr - \\ %3 = fieldptr(@0, @7) ; msg len ptr - \\ %4 = deref(%3) ; msg len - \\ %sysoutreg = str("={rax}") - \\ %rax = str("{rax}") - \\ %rdi = str("{rdi}") - \\ %rsi = str("{rsi}") - \\ %rdx = str("{rdx}") - \\ %rcx = str("rcx") - \\ %r11 = str("r11") - \\ %memory = str("memory") - \\ %syscall = str("syscall") - \\ %5 = asm(%syscall, @2, - \\ volatile=1, - \\ output=%sysoutreg, - \\ inputs=[%rax, %rdi, %rsi, %rdx], - \\ clobbers=[%rcx, %r11, %memory], - \\ args=[%0, %1, %2, %4]) - \\ - \\ %6 = as(@2, @6) ;SYS_exit_group - \\ %7 = as(@2, @4) ;exit code - \\ %8 = asm(%syscall, @2, - \\ volatile=1, - \\ output=%sysoutreg, - \\ inputs=[%rax, %rdi], - \\ clobbers=[%rcx, %r11, %memory], - \\ args=[%6, %7]) - \\ - \\ %9 = unreachable() - \\}) - \\ - \\@9 = str("_start") - \\@10 = export(@9, @8) - , - \\Hello, world! - \\ - ); -} - -fn exeCmp(src: []const u8, expected_stdout: []const u8) void {} diff --git a/test/stage2/test.zig b/test/stage2/test.zig index f4768cd39a..dc92f99506 100644 --- a/test/stage2/test.zig +++ b/test/stage2/test.zig @@ -3,4 +3,5 @@ const TestContext = @import("../../src-self-hosted/test.zig").TestContext; pub fn addCases(ctx: *TestContext) !void { try @import("compile_errors.zig").addCases(ctx); try @import("compare_output.zig").addCases(ctx); + @import("zir.zig").addCases(ctx); } diff --git a/test/stage2/zir.zig b/test/stage2/zir.zig new file mode 100644 index 0000000000..9a65e9ab96 --- /dev/null +++ b/test/stage2/zir.zig @@ -0,0 +1,107 @@ +const TestContext = @import("../../src-self-hosted/test.zig").TestContext; + +pub fn addCases(ctx: *TestContext) void { + ctx.addZIRTransform("elemptr, add, cmp, condbr, return, breakpoint", + \\@void = primitive(void) + \\@usize = primitive(usize) + \\@fnty = fntype([], @void, cc=C) + \\@0 = int(0) + \\@1 = int(1) + \\@2 = int(2) + \\@3 = int(3) + \\ + \\@entry = fn(@fnty, { + \\ %a = str("\x32\x08\x01\x0a") + \\ %eptr0 = elemptr(%a, @0) + \\ %eptr1 = elemptr(%a, @1) + \\ %eptr2 = elemptr(%a, @2) + \\ %eptr3 = elemptr(%a, @3) + \\ %v0 = deref(%eptr0) + \\ %v1 = deref(%eptr1) + \\ %v2 = deref(%eptr2) + \\ %v3 = deref(%eptr3) + \\ %x0 = add(%v0, %v1) + \\ %x1 = add(%v2, %v3) + \\ %result = add(%x0, %x1) + \\ + \\ %expected = int(69) + \\ %ok = cmp(%result, eq, %expected) + \\ %10 = condbr(%ok, { + \\ %11 = return() + \\ }, { + \\ %12 = breakpoint() + \\ }) + \\}) + \\ + \\@9 = str("entry") + \\@10 = export(@9, @entry) + , + \\@0 = primitive(void) + \\@1 = fntype([], @0, cc=C) + \\@2 = fn(@1, { + \\ %0 = return() + \\}) + \\@3 = str("entry") + \\@4 = export(@3, @2) + \\ + ); + + if (@import("std").Target.current.os.tag != .linux or + @import("std").Target.current.cpu.arch != .x86_64) + { + // TODO implement self-hosted PE (.exe file) linking + // TODO implement more ZIR so we don't depend on x86_64-linux + return; + } + + ctx.addZIRCompareOutput("hello world ZIR", + \\@0 = str("Hello, world!\n") + \\@1 = primitive(noreturn) + \\@2 = primitive(usize) + \\@3 = fntype([], @1, cc=Naked) + \\@4 = int(0) + \\@5 = int(1) + \\@6 = int(231) + \\@7 = str("len") + \\ + \\@8 = fn(@3, { + \\ %0 = as(@2, @5) ; SYS_write + \\ %1 = as(@2, @5) ; STDOUT_FILENO + \\ %2 = ptrtoint(@0) ; msg ptr + \\ %3 = fieldptr(@0, @7) ; msg len ptr + \\ %4 = deref(%3) ; msg len + \\ %sysoutreg = str("={rax}") + \\ %rax = str("{rax}") + \\ %rdi = str("{rdi}") + \\ %rsi = str("{rsi}") + \\ %rdx = str("{rdx}") + \\ %rcx = str("rcx") + \\ %r11 = str("r11") + \\ %memory = str("memory") + \\ %syscall = str("syscall") + \\ %5 = asm(%syscall, @2, + \\ volatile=1, + \\ output=%sysoutreg, + \\ inputs=[%rax, %rdi, %rsi, %rdx], + \\ clobbers=[%rcx, %r11, %memory], + \\ args=[%0, %1, %2, %4]) + \\ + \\ %6 = as(@2, @6) ;SYS_exit_group + \\ %7 = as(@2, @4) ;exit code + \\ %8 = asm(%syscall, @2, + \\ volatile=1, + \\ output=%sysoutreg, + \\ inputs=[%rax, %rdi], + \\ clobbers=[%rcx, %r11, %memory], + \\ args=[%6, %7]) + \\ + \\ %9 = unreachable() + \\}) + \\ + \\@9 = str("_start") + \\@10 = export(@9, @8) + , + \\Hello, world! + \\ + ); +} |
