aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-12-29 17:56:30 -0700
committerAndrew Kelley <andrew@ziglang.org>2020-12-29 17:56:30 -0700
commitd18b6785bb394955eb092c82818e0214e456aced (patch)
tree8ff1a615bc30e0bbc707a2934cca8a969ec4a314 /test
parentbbe2cca1ae32af322abcf4cc4a6d6bee671bf5b8 (diff)
downloadzig-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.zig64
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));