diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-05-06 17:51:09 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-05-06 17:51:09 -0700 |
| commit | 3acd98fa3423d67cdce7118bc6abe736309e71df (patch) | |
| tree | a9791f09581cae82771820205e778cffd70c5724 | |
| parent | 7dd33d431612cd8511eaea8dcabdca44b354e14b (diff) | |
| download | zig-3acd98fa3423d67cdce7118bc6abe736309e71df.tar.gz zig-3acd98fa3423d67cdce7118bc6abe736309e71df.zip | |
stage2: CBE tests `pub export` instead of `export` main
This is needed so that start code can avoid redundantly trying to export
a main function for libc to call.
| -rw-r--r-- | BRANCH_TODO | 3 | ||||
| -rw-r--r-- | test/stage2/cbe.zig | 72 |
2 files changed, 39 insertions, 36 deletions
diff --git a/BRANCH_TODO b/BRANCH_TODO index 3508a66f42..53faf82205 100644 --- a/BRANCH_TODO +++ b/BRANCH_TODO @@ -1,6 +1,9 @@ + * start.zig should support pub export fn main with -ofmt=c * get stage2 tests passing * modify stage2 tests so that only 1 uses _start and the rest use pub fn main + * modify stage2 CBE tests so that only 1 uses pub export main and the + rest use pub fn main * use a hash map for instructions because the array is too big - no, actually modify the Zir.Inst.Ref strategy so that each decl gets diff --git a/test/stage2/cbe.zig b/test/stage2/cbe.zig index 1bd2f4a332..332a55e608 100644 --- a/test/stage2/cbe.zig +++ b/test/stage2/cbe.zig @@ -15,7 +15,7 @@ pub fn addCases(ctx: *TestContext) !void { // Regular old hello world case.addCompareOutput( \\extern fn puts(s: [*:0]const u8) c_int; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ _ = puts("hello world!"); \\ return 0; \\} @@ -24,7 +24,7 @@ pub fn addCases(ctx: *TestContext) !void { // Now change the message only case.addCompareOutput( \\extern fn puts(s: [*:0]const u8) c_int; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ _ = puts("yo"); \\ return 0; \\} @@ -33,7 +33,7 @@ pub fn addCases(ctx: *TestContext) !void { // Add an unused Decl case.addCompareOutput( \\extern fn puts(s: [*:0]const u8) c_int; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ _ = puts("yo!"); \\ return 0; \\} @@ -43,7 +43,7 @@ pub fn addCases(ctx: *TestContext) !void { // Comptime return type and calling convention expected. case.addError( \\var x: i32 = 1234; - \\export fn main() x { + \\pub export fn main() x { \\ return 0; \\} \\export fn foo() callconv(y) c_int { @@ -62,7 +62,7 @@ pub fn addCases(ctx: *TestContext) !void { case.addCompareOutput( \\extern fn printf(format: [*:0]const u8, ...) c_int; \\ - \\export fn main() c_int { + \\pub export fn main() c_int { \\ _ = printf("Hello, %s!\n", "world"); \\ return 0; \\} @@ -119,14 +119,14 @@ pub fn addCases(ctx: *TestContext) !void { \\ unreachable; \\} \\ - \\export fn main() c_int { + \\pub export fn main() c_int { \\ exitGood(); \\} , ""); // Pass a usize parameter to exit case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ exit(0); \\} \\ @@ -142,7 +142,7 @@ pub fn addCases(ctx: *TestContext) !void { // Change the parameter to u8 case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ exit(0); \\} \\ @@ -158,7 +158,7 @@ pub fn addCases(ctx: *TestContext) !void { // Do some arithmetic at the exit callsite case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ exitMath(1); \\} \\ @@ -179,7 +179,7 @@ pub fn addCases(ctx: *TestContext) !void { // Invert the arithmetic case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ exitMath(1); \\} \\ @@ -211,7 +211,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ return add(a, b); \\} \\ - \\export fn main() c_int { + \\pub export fn main() c_int { \\ return addIndirect(1, 2) - 3; \\} , ""); @@ -225,7 +225,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ return a + b; \\} \\ - \\export fn main() c_int { + \\pub export fn main() c_int { \\ const x = add(1, 2); \\ var y = add(3, 0); \\ y -= x; @@ -237,7 +237,7 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exeFromCompiledC("@setEvalBranchQuota", .{}); case.addCompareOutput( - \\export fn main() i32 { + \\pub export fn main() i32 { \\ @setEvalBranchQuota(1001); \\ const y = rec(1001); \\ return y - 1; @@ -254,14 +254,14 @@ pub fn addCases(ctx: *TestContext) !void { // Simple while loop case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var a: c_int = 0; \\ while (a < 5) : (a+=1) {} \\ return a - 5; \\} , ""); case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var a = true; \\ while (!a) {} \\ return 0; @@ -270,7 +270,7 @@ pub fn addCases(ctx: *TestContext) !void { // If expression case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var cond: c_int = 0; \\ var a: c_int = @as(c_int, if (cond == 0) \\ 2 @@ -282,7 +282,7 @@ pub fn addCases(ctx: *TestContext) !void { // If expression with breakpoint that does not get hit case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var x: i32 = 1; \\ if (x != 1) @breakpoint(); \\ return 0; @@ -291,7 +291,7 @@ pub fn addCases(ctx: *TestContext) !void { // Switch expression case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var cond: c_int = 0; \\ var a: c_int = switch (cond) { \\ 1 => 1, @@ -306,7 +306,7 @@ pub fn addCases(ctx: *TestContext) !void { // Switch expression missing else case. case.addError( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var cond: c_int = 0; \\ const a: c_int = switch (cond) { \\ 1 => 1, @@ -320,7 +320,7 @@ pub fn addCases(ctx: *TestContext) !void { // Switch expression, has an unreachable prong. case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var cond: c_int = 0; \\ const a: c_int = switch (cond) { \\ 1 => 1, @@ -337,7 +337,7 @@ pub fn addCases(ctx: *TestContext) !void { // Switch expression, has an unreachable prong and prongs write // to result locations. case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var cond: c_int = 0; \\ var a: c_int = switch (cond) { \\ 1 => 1, @@ -353,7 +353,7 @@ pub fn addCases(ctx: *TestContext) !void { // Integer switch expression has duplicate case value. case.addError( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var cond: c_int = 0; \\ const a: c_int = switch (cond) { \\ 1 => 1, @@ -372,7 +372,7 @@ pub fn addCases(ctx: *TestContext) !void { // Boolean switch expression has duplicate case value. case.addError( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var a: bool = false; \\ const b: c_int = switch (a) { \\ false => 1, @@ -386,7 +386,7 @@ pub fn addCases(ctx: *TestContext) !void { // Sparse (no range capable) switch expression has duplicate case value. case.addError( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ const A: type = i32; \\ const b: c_int = switch (A) { \\ i32 => 1, @@ -402,7 +402,7 @@ pub fn addCases(ctx: *TestContext) !void { // Ranges not allowed for some kinds of switches. case.addError( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ const A: type = i32; \\ const b: c_int = switch (A) { \\ i32 => 1, @@ -418,7 +418,7 @@ pub fn addCases(ctx: *TestContext) !void { // Switch expression has unreachable else prong. case.addError( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var a: u2 = 0; \\ const b: i32 = switch (a) { \\ 0 => 10, @@ -437,7 +437,7 @@ pub fn addCases(ctx: *TestContext) !void { // // Simple while loop // case.addCompareOutput( - // \\export fn main() c_int { + // \\pub export fn main() c_int { // \\ var count: c_int = 0; // \\ var opt_ptr: ?*c_int = &count; // \\ while (opt_ptr) |_| : (count += 1) { @@ -449,7 +449,7 @@ pub fn addCases(ctx: *TestContext) !void { // // Same with non pointer optionals // case.addCompareOutput( - // \\export fn main() c_int { + // \\pub export fn main() c_int { // \\ var count: c_int = 0; // \\ var opt_ptr: ?c_int = count; // \\ while (opt_ptr) |_| : (count += 1) { @@ -463,7 +463,7 @@ pub fn addCases(ctx: *TestContext) !void { { var case = ctx.exeFromCompiledC("errors", .{}); case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var e1 = error.Foo; \\ var e2 = error.Bar; \\ assert(e1 != e2); @@ -476,14 +476,14 @@ pub fn addCases(ctx: *TestContext) !void { \\} , ""); case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var e: anyerror!c_int = 0; \\ const i = e catch 69; \\ return i; \\} , ""); case.addCompareOutput( - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var e: anyerror!c_int = error.Foo; \\ const i = e catch 69; \\ return 69 - i; @@ -495,7 +495,7 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exeFromCompiledC("structs", .{}); case.addError( \\const Point = struct { x: i32, y: i32 }; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var p: Point = .{ \\ .y = 24, \\ .x = 12, @@ -509,7 +509,7 @@ pub fn addCases(ctx: *TestContext) !void { }); case.addError( \\const Point = struct { x: i32, y: i32 }; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var p: Point = .{ \\ .y = 24, \\ }; @@ -521,7 +521,7 @@ pub fn addCases(ctx: *TestContext) !void { }); case.addError( \\const Point = struct { x: i32, y: i32 }; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var p: Point = .{ \\ .x = 12, \\ .y = 24, @@ -535,7 +535,7 @@ pub fn addCases(ctx: *TestContext) !void { }); case.addCompareOutput( \\const Point = struct { x: i32, y: i32 }; - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var p: Point = .{ \\ .x = 12, \\ .y = 24, @@ -589,7 +589,7 @@ pub fn addCases(ctx: *TestContext) !void { case.addCompareOutput( \\const Number = enum { One, Two, Three }; \\ - \\export fn main() c_int { + \\pub export fn main() c_int { \\ var number1 = Number.One; \\ var number2: Number = .Two; \\ const number3 = @intToEnum(Number, 2); |
