aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-05-01 17:35:52 -0400
committerGitHub <noreply@github.com>2020-05-01 17:35:52 -0400
commit3386bb896d071eef4ff571fac399e18b2270a382 (patch)
treec3e597506a6f5a41269acdd386fd87bd473cdaa9 /test
parent94b0d0e80242563f4ad7ad41e3c0f5193a60b70c (diff)
parentec6ef86219578822fd32bbe2e5eb83b24ddfdca6 (diff)
downloadzig-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.zig41
-rw-r--r--test/stage2/compile_errors.zig103
-rw-r--r--test/stage2/ir.zig54
-rw-r--r--test/stage2/test.zig1
-rw-r--r--test/stage2/zir.zig107
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!
+ \\
+ );
+}