diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-12-29 17:56:30 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-12-29 17:56:30 -0700 |
| commit | d18b6785bb394955eb092c82818e0214e456aced (patch) | |
| tree | 8ff1a615bc30e0bbc707a2934cca8a969ec4a314 /test | |
| parent | bbe2cca1ae32af322abcf4cc4a6d6bee671bf5b8 (diff) | |
| download | zig-d18b6785bb394955eb092c82818e0214e456aced.tar.gz zig-d18b6785bb394955eb092c82818e0214e456aced.zip | |
stage2: C backend improvements
* Module: improve doc comments
* C backend: improve const-correctness
* C backend: introduce renderTypeAndName
* C backend: put `static` on functions when appropriate
* C backend: fix not handling errors in genBinOp
* C backend: handle more IR instructions
- alloc, store, boolean comparisons, ret_ptr
* C backend: call instruction properly stores its result
* test harness: ensure execution tests have empty stderr
Diffstat (limited to 'test')
| -rw-r--r-- | test/stage2/cbe.zig | 64 |
1 files changed, 41 insertions, 23 deletions
diff --git a/test/stage2/cbe.zig b/test/stage2/cbe.zig index cd26b8aa58..0d2a6d4aec 100644 --- a/test/stage2/cbe.zig +++ b/test/stage2/cbe.zig @@ -33,6 +33,24 @@ pub fn addCases(ctx: *TestContext) !void { //, "yo" ++ std.cstr.line_sep); } + { + var case = ctx.exeFromCompiledC("alloc and retptr", .{}); + + case.addCompareOutput( + \\fn add(a: i32, b: i32) i32 { + \\ return a + b; + \\} + \\ + \\fn addIndirect(a: i32, b: i32) i32 { + \\ return add(a, b); + \\} + \\ + \\export fn main() c_int { + \\ return addIndirect(1, 2) - 3; + \\} + , ""); + } + ctx.c("empty start function", linux_x64, \\export fn _start() noreturn { \\ unreachable; @@ -59,13 +77,13 @@ pub fn addCases(ctx: *TestContext) !void { \\ main(); \\} , - \\zig_noreturn void main(void); + \\static zig_noreturn void main(void); \\ \\zig_noreturn void _start(void) { \\ main(); \\} \\ - \\zig_noreturn void main(void) { + \\static zig_noreturn void main(void) { \\ zig_breakpoint(); \\ zig_unreachable(); \\} @@ -87,7 +105,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ exitGood(); \\} , - \\zig_noreturn void exitGood(void); + \\static zig_noreturn void exitGood(void); \\ \\static uint8_t exitGood__anon_0[6] = "{rax}"; \\static uint8_t exitGood__anon_1[6] = "{rdi}"; @@ -97,7 +115,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ exitGood(); \\} \\ - \\zig_noreturn void exitGood(void) { + \\static zig_noreturn void exitGood(void) { \\ register uintptr_t rax_constant __asm__("rax") = 231; \\ register uintptr_t rdi_constant __asm__("rdi") = 0; \\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant)); @@ -121,7 +139,7 @@ pub fn addCases(ctx: *TestContext) !void { \\} \\ , - \\zig_noreturn void exit(uintptr_t arg0); + \\static zig_noreturn void exit(uintptr_t arg0); \\ \\static uint8_t exit__anon_0[6] = "{rax}"; \\static uint8_t exit__anon_1[6] = "{rdi}"; @@ -131,7 +149,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ exit(0); \\} \\ - \\zig_noreturn void exit(uintptr_t arg0) { + \\static zig_noreturn void exit(uintptr_t arg0) { \\ register uintptr_t rax_constant __asm__("rax") = 231; \\ register uintptr_t rdi_constant __asm__("rdi") = arg0; \\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant)); @@ -155,7 +173,7 @@ pub fn addCases(ctx: *TestContext) !void { \\} \\ , - \\zig_noreturn void exit(uint8_t arg0); + \\static zig_noreturn void exit(uint8_t arg0); \\ \\static uint8_t exit__anon_0[6] = "{rax}"; \\static uint8_t exit__anon_1[6] = "{rdi}"; @@ -165,8 +183,8 @@ pub fn addCases(ctx: *TestContext) !void { \\ exit(0); \\} \\ - \\zig_noreturn void exit(uint8_t arg0) { - \\ const uintptr_t __temp_0 = (uintptr_t)arg0; + \\static zig_noreturn void exit(uint8_t arg0) { + \\ uintptr_t const __temp_0 = (uintptr_t)arg0; \\ register uintptr_t rax_constant __asm__("rax") = 231; \\ register uintptr_t rdi_constant __asm__("rdi") = __temp_0; \\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant)); @@ -194,8 +212,8 @@ pub fn addCases(ctx: *TestContext) !void { \\} \\ , - \\zig_noreturn void exitMath(uint8_t arg0); - \\zig_noreturn void exit(uint8_t arg0); + \\static zig_noreturn void exitMath(uint8_t arg0); + \\static zig_noreturn void exit(uint8_t arg0); \\ \\static uint8_t exit__anon_0[6] = "{rax}"; \\static uint8_t exit__anon_1[6] = "{rdi}"; @@ -205,14 +223,14 @@ pub fn addCases(ctx: *TestContext) !void { \\ exitMath(1); \\} \\ - \\zig_noreturn void exitMath(uint8_t arg0) { - \\ const uint8_t __temp_0 = 0 + arg0; - \\ const uint8_t __temp_1 = __temp_0 - arg0; + \\static zig_noreturn void exitMath(uint8_t arg0) { + \\ uint8_t const __temp_0 = 0 + arg0; + \\ uint8_t const __temp_1 = __temp_0 - arg0; \\ exit(__temp_1); \\} \\ - \\zig_noreturn void exit(uint8_t arg0) { - \\ const uintptr_t __temp_0 = (uintptr_t)arg0; + \\static zig_noreturn void exit(uint8_t arg0) { + \\ uintptr_t const __temp_0 = (uintptr_t)arg0; \\ register uintptr_t rax_constant __asm__("rax") = 231; \\ register uintptr_t rdi_constant __asm__("rdi") = __temp_0; \\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant)); @@ -240,8 +258,8 @@ pub fn addCases(ctx: *TestContext) !void { \\} \\ , - \\zig_noreturn void exitMath(uint8_t arg0); - \\zig_noreturn void exit(uint8_t arg0); + \\static zig_noreturn void exitMath(uint8_t arg0); + \\static zig_noreturn void exit(uint8_t arg0); \\ \\static uint8_t exit__anon_0[6] = "{rax}"; \\static uint8_t exit__anon_1[6] = "{rdi}"; @@ -251,14 +269,14 @@ pub fn addCases(ctx: *TestContext) !void { \\ exitMath(1); \\} \\ - \\zig_noreturn void exitMath(uint8_t arg0) { - \\ const uint8_t __temp_0 = arg0 + 0; - \\ const uint8_t __temp_1 = __temp_0 - arg0; + \\static zig_noreturn void exitMath(uint8_t arg0) { + \\ uint8_t const __temp_0 = arg0 + 0; + \\ uint8_t const __temp_1 = __temp_0 - arg0; \\ exit(__temp_1); \\} \\ - \\zig_noreturn void exit(uint8_t arg0) { - \\ const uintptr_t __temp_0 = (uintptr_t)arg0; + \\static zig_noreturn void exit(uint8_t arg0) { + \\ uintptr_t const __temp_0 = (uintptr_t)arg0; \\ register uintptr_t rax_constant __asm__("rax") = 231; \\ register uintptr_t rdi_constant __asm__("rdi") = __temp_0; \\ __asm volatile ("syscall" :: ""(rax_constant), ""(rdi_constant)); |
