diff --git a/lib/std/start.zig b/lib/std/start.zig index ed4b4fc3c8..1d3cad93d2 100644 --- a/lib/std/start.zig +++ b/lib/std/start.zig @@ -30,7 +30,7 @@ comptime { } } else if (builtin.os.tag == .windows) { @export(wWinMainCRTStartup2, .{ .name = "wWinMainCRTStartup" }); - } else if (builtin.os.tag == .wasi) { + } else if (builtin.os.tag == .wasi and @hasDecl(root, "main")) { @export(wasmMain2, .{ .name = "_start" }); } else { if (!@hasDecl(root, "_start")) { diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index 9e4315ead9..55b0aff81f 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -812,7 +812,7 @@ pub fn genFunc(self: *Self) InnerError!Result { /// Generates the wasm bytecode for the declaration belonging to `Context` pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result { if (val.isUndef()) { - try self.code.appendNTimes(0xaa, ty.abiSize(self.target)); + try self.code.appendNTimes(0xaa, @intCast(usize, ty.abiSize(self.target))); return Result.appended; } switch (ty.zigTypeTag()) { @@ -833,7 +833,7 @@ pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result { } else if (!val.isNull()) { return try self.genDecl(payload_type, val); } else { - try self.code.appendNTimes(0, ty.abiSize(self.target)); + try self.code.appendNTimes(0, @intCast(usize, ty.abiSize(self.target))); return Result.appended; } } @@ -882,7 +882,7 @@ pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result { }, .Int => { const info = ty.intInfo(self.target); - const abi_size = ty.abiSize(self.target); + const abi_size = @intCast(usize, ty.abiSize(self.target)); // todo: Implement integer sizes larger than 64bits if (info.bits > 64) return self.fail("TODO: Implement genDecl for integer bit size: {d}", .{info.bits}); var buf: [8]u8 = undefined; @@ -916,8 +916,8 @@ pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result { }, .Union => { // TODO: Implement Union declarations - const abi_size = ty.abiSize(self.target); - try self.code.writer().writeByteNTimes(0xaa, abi_size); + const abi_size = @intCast(usize, ty.abiSize(self.target)); + try self.code.appendNTimes(0xaa, abi_size); return Result.appended; }, .Pointer => switch (val.tag()) { @@ -973,7 +973,7 @@ fn lowerDeclRef(self: *Self, decl: *Module.Decl) InnerError!Result { .relocation_type = .R_WASM_MEMORY_ADDR_I32, }); } - const ptr_width = self.target.cpu.arch.ptrBitWidth() / 8; + const ptr_width = @intCast(usize, self.target.cpu.arch.ptrBitWidth() / 8); try self.code.appendNTimes(0xaa, ptr_width); return Result.appended; diff --git a/test/cases.zig b/test/cases.zig index eb0b8fb8b9..4a0810ef8a 100644 --- a/test/cases.zig +++ b/test/cases.zig @@ -26,7 +26,7 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("hello world with updates", linux_x64); case.addError("", &[_][]const u8{ - ":97:9: error: struct 'tmp.tmp' has no member named 'main'", + ":99:9: error: struct 'tmp.tmp' has no member named 'main'", }); // Incorrect return type diff --git a/test/stage2/darwin.zig b/test/stage2/darwin.zig index ab4f3923ae..3976dda08f 100644 --- a/test/stage2/darwin.zig +++ b/test/stage2/darwin.zig @@ -14,7 +14,7 @@ pub fn addCases(ctx: *TestContext) !void { { var case = ctx.exe("darwin hello world with updates", target); case.addError("", &[_][]const u8{ - ":97:9: error: struct 'tmp.tmp' has no member named 'main'", + ":99:9: error: struct 'tmp.tmp' has no member named 'main'", }); // Incorrect return type diff --git a/test/stage2/wasm.zig b/test/stage2/wasm.zig index b28834e9b7..20ff65e0a7 100644 --- a/test/stage2/wasm.zig +++ b/test/stage2/wasm.zig @@ -11,7 +11,7 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm function calls", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ foo(); \\ bar(); \\ return 42; @@ -26,7 +26,7 @@ pub fn addCases(ctx: *TestContext) !void { ); case.addCompareOutput( - \\pub export fn _start() i64 { + \\pub fn main() u8 { \\ bar(); \\ foo(); \\ foo(); @@ -44,10 +44,10 @@ pub fn addCases(ctx: *TestContext) !void { ); case.addCompareOutput( - \\pub export fn _start() f32 { + \\pub fn main() void { \\ bar(); \\ foo(); - \\ return 42.0; + \\ return; \\} \\fn foo() void { \\ bar(); @@ -56,15 +56,15 @@ pub fn addCases(ctx: *TestContext) !void { \\} \\fn bar() void {} , - "42\n", + "0\n", ); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ foo(10, 20); \\ return 5; \\} - \\fn foo(x: u32, y: u32) void { _ = x; _ = y; } + \\fn foo(x: u8, y: u8) void { _ = x; _ = y; } , "5\n"); } @@ -72,10 +72,10 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm locals", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ var y: f32 = 42.0; - \\ var x: u32 = 10; + \\ var x: u8 = 10; \\ if (false) { \\ y; \\ x; @@ -85,18 +85,18 @@ pub fn addCases(ctx: *TestContext) !void { , "5\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ var y: f32 = 42.0; \\ _ = y; - \\ var x: u32 = 10; + \\ var x: u8 = 10; \\ foo(i, x); \\ i = x; \\ return i; \\} - \\fn foo(x: u32, y: u32) void { + \\fn foo(x: u8, y: u8) void { \\ _ = y; - \\ var i: u32 = 10; + \\ var i: u8 = 10; \\ i = x; \\} , "10\n"); @@ -106,228 +106,246 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm binary operands", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ i += 20; \\ return i; \\} , "25\n"); case.addCompareOutput( - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var i: i32 = 2147483647; - \\ return i +% 1; - \\} - , "-2147483648\n"); - - case.addCompareOutput( - \\pub export fn _start() i32 { - \\ var i: i4 = 7; - \\ return i +% 1; + \\ if (i +% 1 != -2147483648) unreachable; + \\ return; \\} , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() void { + \\ var i: i4 = 7; + \\ if (i +% 1 != 0) unreachable; + \\ return; + \\} + , "0\n"); + + case.addCompareOutput( + \\pub fn main() u8 { \\ var i: u8 = 255; \\ return i +% 1; \\} , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ i += 20; - \\ var result: u32 = foo(i, 10); + \\ var result: u8 = foo(i, 10); \\ return result; \\} - \\fn foo(x: u32, y: u32) u32 { + \\fn foo(x: u8, y: u8) u8 { \\ return x + y; \\} , "35\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 20; + \\pub fn main() u8 { + \\ var i: u8 = 20; \\ i -= 5; \\ return i; \\} , "15\n"); case.addCompareOutput( - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var i: i32 = -2147483648; - \\ return i -% 1; + \\ if (i -% 1 != 2147483647) unreachable; + \\ return; \\} - , "2147483647\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var i: i7 = -64; - \\ return i -% 1; + \\ if (i -% 1 != 63) unreachable; + \\ return; \\} - , "63\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var i: u4 = 0; \\ return i -% 1; \\} , "15\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ i -= 3; - \\ var result: u32 = foo(i, 10); + \\ var result: u8 = foo(i, 10); \\ return result; \\} - \\fn foo(x: u32, y: u32) u32 { + \\fn foo(x: u8, y: u8) u8 { \\ return y - x; \\} , "8\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() void { \\ var i: u32 = 5; \\ i *= 7; \\ var result: u32 = foo(i, 10); - \\ return result; + \\ if (result != 350) unreachable; + \\ return; \\} \\fn foo(x: u32, y: u32) u32 { \\ return x * y; \\} - , "350\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var i: i32 = 2147483647; - \\ return i *% 2; + \\ const result = i *% 2; + \\ if (result != -2) unreachable; + \\ return; \\} - , "-2\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() void { \\ var i: u3 = 3; - \\ return i *% 3; + \\ if (i *% 3 != 1) unreachable; + \\ return; \\} - , "1\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var i: i4 = 3; - \\ return i *% 3; + \\ if (i *% 3 != 1) unreachable; + \\ return; \\} - , "1\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() void { \\ var i: u32 = 352; \\ i /= 7; // i = 50 \\ var result: u32 = foo(i, 7); - \\ return result; + \\ if (result != 7) unreachable; + \\ return; \\} \\fn foo(x: u32, y: u32) u32 { \\ return x / y; \\} - , "7\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ i &= 6; \\ return i; \\} , "4\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ i |= 6; \\ return i; \\} , "7\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; + \\pub fn main() u8 { + \\ var i: u8 = 5; \\ i ^= 6; \\ return i; \\} , "3\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = false; \\ b = b or false; - \\ return b; + \\ if (b) unreachable; + \\ return; \\} , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = true; \\ b = b or false; - \\ return b; + \\ if (!b) unreachable; + \\ return; \\} - , "1\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = false; \\ b = b or true; - \\ return b; + \\ if (!b) unreachable; + \\ return; \\} - , "1\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = true; \\ b = b or true; - \\ return b; + \\ if (!b) unreachable; + \\ return; \\} - , "1\n"); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = false; \\ b = b and false; - \\ return b; + \\ if (b) unreachable; + \\ return; \\} , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = true; \\ b = b and false; - \\ return b; + \\ if (b) unreachable; + \\ return; \\} , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = false; \\ b = b and true; - \\ return b; + \\ if (b) unreachable; + \\ return; \\} , "0\n"); case.addCompareOutput( - \\pub export fn _start() bool { + \\pub fn main() void { \\ var b: bool = true; \\ b = b and true; - \\ return b; + \\ if (!b) unreachable; + \\ return; \\} - , "1\n"); + , "0\n"); } { var case = ctx.exe("wasm conditions", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; - \\ if (i > @as(u32, 4)) { + \\pub fn main() u8 { + \\ var i: u8 = 5; + \\ if (i > @as(u8, 4)) { \\ i += 10; \\ } \\ return i; @@ -335,9 +353,9 @@ pub fn addCases(ctx: *TestContext) !void { , "15\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; - \\ if (i < @as(u32, 4)) { + \\pub fn main() u8 { + \\ var i: u8 = 5; + \\ if (i < @as(u8, 4)) { \\ i += 10; \\ } else { \\ i = 2; @@ -347,11 +365,11 @@ pub fn addCases(ctx: *TestContext) !void { , "2\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 5; - \\ if (i < @as(u32, 4)) { + \\pub fn main() u8 { + \\ var i: u8 = 5; + \\ if (i < @as(u8, 4)) { \\ i += 10; - \\ } else if(i == @as(u32, 5)) { + \\ } else if(i == @as(u8, 5)) { \\ i = 20; \\ } \\ return i; @@ -359,12 +377,12 @@ pub fn addCases(ctx: *TestContext) !void { , "20\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 11; - \\ if (i < @as(u32, 4)) { + \\pub fn main() u8 { + \\ var i: u8 = 11; + \\ if (i < @as(u8, 4)) { \\ i += 10; \\ } else { - \\ if (i > @as(u32, 10)) { + \\ if (i > @as(u8, 10)) { \\ i += 20; \\ } else { \\ i = 20; @@ -375,7 +393,7 @@ pub fn addCases(ctx: *TestContext) !void { , "31\n"); case.addCompareOutput( - \\pub export fn _start() void { + \\pub fn main() void { \\ assert(foo(true) != @as(i32, 30)); \\} \\ @@ -387,10 +405,10 @@ pub fn addCases(ctx: *TestContext) !void { \\ const x = if(ok) @as(i32, 20) else @as(i32, 10); \\ return x; \\} - , ""); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() void { + \\pub fn main() void { \\ assert(foo(false) == @as(i32, 20)); \\ assert(foo(true) == @as(i32, 30)); \\} @@ -407,16 +425,16 @@ pub fn addCases(ctx: *TestContext) !void { \\ }; \\ return val + 10; \\} - , ""); + , "0\n"); } { var case = ctx.exe("wasm while loops", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 0; - \\ while(i < @as(u32, 5)){ + \\pub fn main() u8 { + \\ var i: u8 = 0; + \\ while(i < @as(u8, 5)){ \\ i += 1; \\ } \\ @@ -425,10 +443,10 @@ pub fn addCases(ctx: *TestContext) !void { , "5\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 0; - \\ while(i < @as(u32, 10)){ - \\ var x: u32 = 1; + \\pub fn main() u8 { + \\ var i: u8 = 0; + \\ while(i < @as(u8, 10)){ + \\ var x: u8 = 1; \\ i += x; \\ } \\ return i; @@ -436,12 +454,12 @@ pub fn addCases(ctx: *TestContext) !void { , "10\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var i: u32 = 0; - \\ while(i < @as(u32, 10)){ - \\ var x: u32 = 1; + \\pub fn main() u8 { + \\ var i: u8 = 0; + \\ while(i < @as(u8, 10)){ + \\ var x: u8 = 1; \\ i += x; - \\ if (i == @as(u32, 5)) break; + \\ if (i == @as(u8, 5)) break; \\ } \\ return i; \\} @@ -454,7 +472,7 @@ pub fn addCases(ctx: *TestContext) !void { case.addCompareOutput( \\const Number = enum { One, Two, Three }; \\ - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var number1 = Number.One; \\ var number2: Number = .Two; \\ if (false) { @@ -462,47 +480,52 @@ pub fn addCases(ctx: *TestContext) !void { \\ number2; \\ } \\ const number3 = @intToEnum(Number, 2); - \\ - \\ return @enumToInt(number3); + \\ if (@enumToInt(number3) != 2) { + \\ unreachable; + \\ } + \\ return; \\} - , "2\n"); + , "0\n"); case.addCompareOutput( \\const Number = enum { One, Two, Three }; \\ - \\pub export fn _start() i32 { + \\pub fn main() void { \\ var number1 = Number.One; \\ var number2: Number = .Two; \\ const number3 = @intToEnum(Number, 2); - \\ if (number1 == number2) return 1; - \\ if (number2 == number3) return 1; - \\ if (@enumToInt(number1) != 0) return 1; - \\ if (@enumToInt(number2) != 1) return 1; - \\ if (@enumToInt(number3) != 2) return 1; + \\ assert(number1 != number2); + \\ assert(number2 != number3); + \\ assert(@enumToInt(number1) == 0); + \\ assert(@enumToInt(number2) == 1); + \\ assert(@enumToInt(number3) == 2); \\ var x: Number = .Two; - \\ if (number2 != x) return 1; + \\ assert(number2 == x); \\ - \\ return @enumToInt(number3); + \\ return; \\} - , "2\n"); + \\fn assert(val: bool) void { + \\ if(!val) unreachable; + \\} + , "0\n"); } { var case = ctx.exe("wasm structs", wasi); case.addCompareOutput( - \\const Example = struct { x: u32 }; + \\const Example = struct { x: u8 }; \\ - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var example: Example = .{ .x = 5 }; \\ return example.x; \\} , "5\n"); case.addCompareOutput( - \\const Example = struct { x: u32 }; + \\const Example = struct { x: u8 }; \\ - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var example: Example = .{ .x = 5 }; \\ example.x = 10; \\ return example.x; @@ -510,18 +533,18 @@ pub fn addCases(ctx: *TestContext) !void { , "10\n"); case.addCompareOutput( - \\const Example = struct { x: u32, y: u32 }; + \\const Example = struct { x: u8, y: u8 }; \\ - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var example: Example = .{ .x = 5, .y = 10 }; \\ return example.y + example.x; \\} , "15\n"); case.addCompareOutput( - \\const Example = struct { x: u32, y: u32 }; + \\const Example = struct { x: u8, y: u8 }; \\ - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var example: Example = .{ .x = 5, .y = 10 }; \\ var example2: Example = .{ .x = 10, .y = 20 }; \\ @@ -531,9 +554,9 @@ pub fn addCases(ctx: *TestContext) !void { , "30\n"); case.addCompareOutput( - \\const Example = struct { x: u32, y: u32 }; + \\const Example = struct { x: u8, y: u8 }; \\ - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var example: Example = .{ .x = 5, .y = 10 }; \\ \\ example = .{ .x = 10, .y = 20 }; @@ -546,9 +569,9 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm switch", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var val: u32 = 1; - \\ var a: u32 = switch (val) { + \\pub fn main() u8 { + \\ var val: u8 = 1; + \\ var a: u8 = switch (val) { \\ 0, 1 => 2, \\ 2 => 3, \\ 3 => 4, @@ -560,9 +583,9 @@ pub fn addCases(ctx: *TestContext) !void { , "2\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var val: u32 = 2; - \\ var a: u32 = switch (val) { + \\pub fn main() u8 { + \\ var val: u8 = 2; + \\ var a: u8 = switch (val) { \\ 0, 1 => 2, \\ 2 => 3, \\ 3 => 4, @@ -574,9 +597,9 @@ pub fn addCases(ctx: *TestContext) !void { , "3\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var val: u32 = 10; - \\ var a: u32 = switch (val) { + \\pub fn main() u8 { + \\ var val: u8 = 10; + \\ var a: u8 = switch (val) { \\ 0, 1 => 2, \\ 2 => 3, \\ 3 => 4, @@ -590,9 +613,9 @@ pub fn addCases(ctx: *TestContext) !void { case.addCompareOutput( \\const MyEnum = enum { One, Two, Three }; \\ - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var val: MyEnum = .Two; - \\ var a: u32 = switch (val) { + \\ var a: u8 = switch (val) { \\ .One => 1, \\ .Two => 2, \\ .Three => 3, @@ -607,7 +630,7 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm error unions", wasi); case.addCompareOutput( - \\pub export fn _start() void { + \\pub fn main() void { \\ var e1 = error.Foo; \\ var e2 = error.Bar; \\ assert(e1 != e2); @@ -618,32 +641,32 @@ pub fn addCases(ctx: *TestContext) !void { \\fn assert(b: bool) void { \\ if (!b) unreachable; \\} - , ""); + , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var e: anyerror!u32 = 5; + \\pub fn main() u8 { + \\ var e: anyerror!u8 = 5; \\ const i = e catch 10; \\ return i; \\} , "5\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var e: anyerror!u32 = error.Foo; + \\pub fn main() u8 { + \\ var e: anyerror!u8 = error.Foo; \\ const i = e catch 10; \\ return i; \\} , "10\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var e = foo(); \\ const i = e catch 69; \\ return i; \\} \\ - \\fn foo() anyerror!u32 { + \\fn foo() anyerror!u8 { \\ return 5; \\} , "5\n"); @@ -653,24 +676,24 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm error union part 2", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var e = foo(); \\ const i = e catch 69; \\ return i; \\} \\ - \\fn foo() anyerror!u32 { + \\fn foo() anyerror!u8 { \\ return error.Bruh; \\} , "69\n"); case.addCompareOutput( - \\pub export fn _start() u32 { + \\pub fn main() u8 { \\ var e = foo(); \\ const i = e catch 42; \\ return i; \\} \\ - \\fn foo() anyerror!u32 { + \\fn foo() anyerror!u8 { \\ return error.Dab; \\} , "42\n"); @@ -680,20 +703,22 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm integer widening", wasi); case.addCompareOutput( - \\pub export fn _start() u64 { - \\ var x: u32 = 5; - \\ return x; + \\pub fn main() void{ + \\ var x: u8 = 5; + \\ var y: u64 = x; + \\ _ = y; + \\ return; \\} - , "5\n"); + , "0\n"); } { var case = ctx.exe("wasm optionals", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var x: ?u32 = 5; - \\ var y: u32 = 0; + \\pub fn main() u8 { + \\ var x: ?u8 = 5; + \\ var y: u8 = 0; \\ if (x) |val| { \\ y = val; \\ } @@ -702,9 +727,9 @@ pub fn addCases(ctx: *TestContext) !void { , "5\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var x: ?u32 = null; - \\ var y: u32 = 0; + \\pub fn main() u8 { + \\ var x: ?u8 = null; + \\ var y: u8 = 0; \\ if (x) |val| { \\ y = val; \\ } @@ -713,23 +738,23 @@ pub fn addCases(ctx: *TestContext) !void { , "0\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var x: ?u32 = 5; + \\pub fn main() u8 { + \\ var x: ?u8 = 5; \\ return x.?; \\} , "5\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var x: u32 = 5; - \\ var y: ?u32 = x; + \\pub fn main() u8 { + \\ var x: u8 = 5; + \\ var y: ?u8 = x; \\ return y.?; \\} , "5\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var val: ?u32 = 5; + \\pub fn main() u8 { + \\ var val: ?u8 = 5; \\ while (val) |*v| { \\ v.* -= 1; \\ if (v.* == 2) { @@ -745,32 +770,32 @@ pub fn addCases(ctx: *TestContext) !void { var case = ctx.exe("wasm pointers", wasi); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var x: u32 = 0; + \\pub fn main() u8 { + \\ var x: u8 = 0; \\ \\ foo(&x); \\ return x; \\} \\ - \\fn foo(x: *u32)void { + \\fn foo(x: *u8)void { \\ x.* = 2; \\} , "2\n"); case.addCompareOutput( - \\pub export fn _start() u32 { - \\ var x: u32 = 0; + \\pub fn main() u8 { + \\ var x: u8 = 0; \\ \\ foo(&x); \\ bar(&x); \\ return x; \\} \\ - \\fn foo(x: *u32)void { + \\fn foo(x: *u8)void { \\ x.* = 2; \\} \\ - \\fn bar(x: *u32) void { + \\fn bar(x: *u8) void { \\ x.* += 2; \\} , "4\n");