authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2021-11-28 20:31:12+01:00
committergravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2021-11-29 08:05:51+01:00
logadf059f272dfd3c1652bce774c0b6c204d5d6b8b
tree6069b21656f698de2e882a7f52a9ecb71dc5eaf1
parentdd49eca34274cd2396cbe06a199fe8db9e8faf79
signaturelock-open Commit is signed but in an unrecognized format.

wasm: Update wasm stage2 test backend to use 'main'


5 files changed, 215 insertions(+), 190 deletions(-)

lib/std/start.zig+1-1
......@@ -30,7 +30,7 @@ comptime {
3030 }
3131 } else if (builtin.os.tag == .windows) {
3232 @export(wWinMainCRTStartup2, .{ .name = "wWinMainCRTStartup" });
33 } else if (builtin.os.tag == .wasi) {
33 } else if (builtin.os.tag == .wasi and @hasDecl(root, "main")) {
3434 @export(wasmMain2, .{ .name = "_start" });
3535 } else {
3636 if (!@hasDecl(root, "_start")) {
src/arch/wasm/CodeGen.zig+6-6
......@@ -812,7 +812,7 @@ pub fn genFunc(self: *Self) InnerError!Result {
812812/// Generates the wasm bytecode for the declaration belonging to `Context`
813813pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result {
814814 if (val.isUndef()) {
815 try self.code.appendNTimes(0xaa, ty.abiSize(self.target));
815 try self.code.appendNTimes(0xaa, @intCast(usize, ty.abiSize(self.target)));
816816 return Result.appended;
817817 }
818818 switch (ty.zigTypeTag()) {
......@@ -833,7 +833,7 @@ pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result {
833833 } else if (!val.isNull()) {
834834 return try self.genDecl(payload_type, val);
835835 } else {
836 try self.code.appendNTimes(0, ty.abiSize(self.target));
836 try self.code.appendNTimes(0, @intCast(usize, ty.abiSize(self.target)));
837837 return Result.appended;
838838 }
839839 }
......@@ -882,7 +882,7 @@ pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result {
882882 },
883883 .Int => {
884884 const info = ty.intInfo(self.target);
885 const abi_size = ty.abiSize(self.target);
885 const abi_size = @intCast(usize, ty.abiSize(self.target));
886886 // todo: Implement integer sizes larger than 64bits
887887 if (info.bits > 64) return self.fail("TODO: Implement genDecl for integer bit size: {d}", .{info.bits});
888888 var buf: [8]u8 = undefined;
......@@ -916,8 +916,8 @@ pub fn genDecl(self: *Self, ty: Type, val: Value) InnerError!Result {
916916 },
917917 .Union => {
918918 // TODO: Implement Union declarations
919 const abi_size = ty.abiSize(self.target);
920 try self.code.writer().writeByteNTimes(0xaa, abi_size);
919 const abi_size = @intCast(usize, ty.abiSize(self.target));
920 try self.code.appendNTimes(0xaa, abi_size);
921921 return Result.appended;
922922 },
923923 .Pointer => switch (val.tag()) {
......@@ -973,7 +973,7 @@ fn lowerDeclRef(self: *Self, decl: *Module.Decl) InnerError!Result {
973973 .relocation_type = .R_WASM_MEMORY_ADDR_I32,
974974 });
975975 }
976 const ptr_width = self.target.cpu.arch.ptrBitWidth() / 8;
976 const ptr_width = @intCast(usize, self.target.cpu.arch.ptrBitWidth() / 8);
977977 try self.code.appendNTimes(0xaa, ptr_width);
978978
979979 return Result.appended;
test/cases.zig+1-1
......@@ -26,7 +26,7 @@ pub fn addCases(ctx: *TestContext) !void {
2626 var case = ctx.exe("hello world with updates", linux_x64);
2727
2828 case.addError("", &[_][]const u8{
29 ":97:9: error: struct 'tmp.tmp' has no member named 'main'",
29 ":99:9: error: struct 'tmp.tmp' has no member named 'main'",
3030 });
3131
3232 // Incorrect return type
test/stage2/darwin.zig+1-1
......@@ -14,7 +14,7 @@ pub fn addCases(ctx: *TestContext) !void {
1414 {
1515 var case = ctx.exe("darwin hello world with updates", target);
1616 case.addError("", &[_][]const u8{
17 ":97:9: error: struct 'tmp.tmp' has no member named 'main'",
17 ":99:9: error: struct 'tmp.tmp' has no member named 'main'",
1818 });
1919
2020 // Incorrect return type
test/stage2/wasm.zig+206-181
......@@ -11,7 +11,7 @@ pub fn addCases(ctx: *TestContext) !void {
1111 var case = ctx.exe("wasm function calls", wasi);
1212
1313 case.addCompareOutput(
14 \\pub export fn _start() u32 {
14 \\pub fn main() u8 {
1515 \\ foo();
1616 \\ bar();
1717 \\ return 42;
......@@ -26,7 +26,7 @@ pub fn addCases(ctx: *TestContext) !void {
2626 );
2727
2828 case.addCompareOutput(
29 \\pub export fn _start() i64 {
29 \\pub fn main() u8 {
3030 \\ bar();
3131 \\ foo();
3232 \\ foo();
......@@ -44,10 +44,10 @@ pub fn addCases(ctx: *TestContext) !void {
4444 );
4545
4646 case.addCompareOutput(
47 \\pub export fn _start() f32 {
47 \\pub fn main() void {
4848 \\ bar();
4949 \\ foo();
50 \\ return 42.0;
50 \\ return;
5151 \\}
5252 \\fn foo() void {
5353 \\ bar();
......@@ -56,15 +56,15 @@ pub fn addCases(ctx: *TestContext) !void {
5656 \\}
5757 \\fn bar() void {}
5858 ,
59 "42\n",
59 "0\n",
6060 );
6161
6262 case.addCompareOutput(
63 \\pub export fn _start() u32 {
63 \\pub fn main() u8 {
6464 \\ foo(10, 20);
6565 \\ return 5;
6666 \\}
67 \\fn foo(x: u32, y: u32) void { _ = x; _ = y; }
67 \\fn foo(x: u8, y: u8) void { _ = x; _ = y; }
6868 , "5\n");
6969 }
7070
......@@ -72,10 +72,10 @@ pub fn addCases(ctx: *TestContext) !void {
7272 var case = ctx.exe("wasm locals", wasi);
7373
7474 case.addCompareOutput(
75 \\pub export fn _start() u32 {
76 \\ var i: u32 = 5;
75 \\pub fn main() u8 {
76 \\ var i: u8 = 5;
7777 \\ var y: f32 = 42.0;
78 \\ var x: u32 = 10;
78 \\ var x: u8 = 10;
7979 \\ if (false) {
8080 \\ y;
8181 \\ x;
......@@ -85,18 +85,18 @@ pub fn addCases(ctx: *TestContext) !void {
8585 , "5\n");
8686
8787 case.addCompareOutput(
88 \\pub export fn _start() u32 {
89 \\ var i: u32 = 5;
88 \\pub fn main() u8 {
89 \\ var i: u8 = 5;
9090 \\ var y: f32 = 42.0;
9191 \\ _ = y;
92 \\ var x: u32 = 10;
92 \\ var x: u8 = 10;
9393 \\ foo(i, x);
9494 \\ i = x;
9595 \\ return i;
9696 \\}
97 \\fn foo(x: u32, y: u32) void {
97 \\fn foo(x: u8, y: u8) void {
9898 \\ _ = y;
99 \\ var i: u32 = 10;
99 \\ var i: u8 = 10;
100100 \\ i = x;
101101 \\}
102102 , "10\n");
......@@ -106,228 +106,246 @@ pub fn addCases(ctx: *TestContext) !void {
106106 var case = ctx.exe("wasm binary operands", wasi);
107107
108108 case.addCompareOutput(
109 \\pub export fn _start() u32 {
110 \\ var i: u32 = 5;
109 \\pub fn main() u8 {
110 \\ var i: u8 = 5;
111111 \\ i += 20;
112112 \\ return i;
113113 \\}
114114 , "25\n");
115115
116116 case.addCompareOutput(
117 \\pub export fn _start() i32 {
117 \\pub fn main() void {
118118 \\ var i: i32 = 2147483647;
119 \\ return i +% 1;
119 \\ if (i +% 1 != -2147483648) unreachable;
120 \\ return;
120121 \\}
121 , "-2147483648\n");
122 , "0\n");
122123
123124 case.addCompareOutput(
124 \\pub export fn _start() i32 {
125 \\pub fn main() void {
125126 \\ var i: i4 = 7;
126 \\ return i +% 1;
127 \\ if (i +% 1 != 0) unreachable;
128 \\ return;
127129 \\}
128130 , "0\n");
129131
130132 case.addCompareOutput(
131 \\pub export fn _start() u32 {
133 \\pub fn main() u8 {
132134 \\ var i: u8 = 255;
133135 \\ return i +% 1;
134136 \\}
135137 , "0\n");
136138
137139 case.addCompareOutput(
138 \\pub export fn _start() u32 {
139 \\ var i: u32 = 5;
140 \\pub fn main() u8 {
141 \\ var i: u8 = 5;
140142 \\ i += 20;
141 \\ var result: u32 = foo(i, 10);
143 \\ var result: u8 = foo(i, 10);
142144 \\ return result;
143145 \\}
144 \\fn foo(x: u32, y: u32) u32 {
146 \\fn foo(x: u8, y: u8) u8 {
145147 \\ return x + y;
146148 \\}
147149 , "35\n");
148150
149151 case.addCompareOutput(
150 \\pub export fn _start() u32 {
151 \\ var i: u32 = 20;
152 \\pub fn main() u8 {
153 \\ var i: u8 = 20;
152154 \\ i -= 5;
153155 \\ return i;
154156 \\}
155157 , "15\n");
156158
157159 case.addCompareOutput(
158 \\pub export fn _start() i32 {
160 \\pub fn main() void {
159161 \\ var i: i32 = -2147483648;
160 \\ return i -% 1;
162 \\ if (i -% 1 != 2147483647) unreachable;
163 \\ return;
161164 \\}
162 , "2147483647\n");
165 , "0\n");
163166
164167 case.addCompareOutput(
165 \\pub export fn _start() i32 {
168 \\pub fn main() void {
166169 \\ var i: i7 = -64;
167 \\ return i -% 1;
170 \\ if (i -% 1 != 63) unreachable;
171 \\ return;
168172 \\}
169 , "63\n");
173 , "0\n");
170174
171175 case.addCompareOutput(
172 \\pub export fn _start() u32 {
176 \\pub fn main() u8 {
173177 \\ var i: u4 = 0;
174178 \\ return i -% 1;
175179 \\}
176180 , "15\n");
177181
178182 case.addCompareOutput(
179 \\pub export fn _start() u32 {
180 \\ var i: u32 = 5;
183 \\pub fn main() u8 {
184 \\ var i: u8 = 5;
181185 \\ i -= 3;
182 \\ var result: u32 = foo(i, 10);
186 \\ var result: u8 = foo(i, 10);
183187 \\ return result;
184188 \\}
185 \\fn foo(x: u32, y: u32) u32 {
189 \\fn foo(x: u8, y: u8) u8 {
186190 \\ return y - x;
187191 \\}
188192 , "8\n");
189193
190194 case.addCompareOutput(
191 \\pub export fn _start() u32 {
195 \\pub fn main() void {
192196 \\ var i: u32 = 5;
193197 \\ i *= 7;
194198 \\ var result: u32 = foo(i, 10);
195 \\ return result;
199 \\ if (result != 350) unreachable;
200 \\ return;
196201 \\}
197202 \\fn foo(x: u32, y: u32) u32 {
198203 \\ return x * y;
199204 \\}
200 , "350\n");
205 , "0\n");
201206
202207 case.addCompareOutput(
203 \\pub export fn _start() i32 {
208 \\pub fn main() void {
204209 \\ var i: i32 = 2147483647;
205 \\ return i *% 2;
210 \\ const result = i *% 2;
211 \\ if (result != -2) unreachable;
212 \\ return;
206213 \\}
207 , "-2\n");
214 , "0\n");
208215
209216 case.addCompareOutput(
210 \\pub export fn _start() u32 {
217 \\pub fn main() void {
211218 \\ var i: u3 = 3;
212 \\ return i *% 3;
219 \\ if (i *% 3 != 1) unreachable;
220 \\ return;
213221 \\}
214 , "1\n");
222 , "0\n");
215223
216224 case.addCompareOutput(
217 \\pub export fn _start() i32 {
225 \\pub fn main() void {
218226 \\ var i: i4 = 3;
219 \\ return i *% 3;
227 \\ if (i *% 3 != 1) unreachable;
228 \\ return;
220229 \\}
221 , "1\n");
230 , "0\n");
222231
223232 case.addCompareOutput(
224 \\pub export fn _start() u32 {
233 \\pub fn main() void {
225234 \\ var i: u32 = 352;
226235 \\ i /= 7; // i = 50
227236 \\ var result: u32 = foo(i, 7);
228 \\ return result;
237 \\ if (result != 7) unreachable;
238 \\ return;
229239 \\}
230240 \\fn foo(x: u32, y: u32) u32 {
231241 \\ return x / y;
232242 \\}
233 , "7\n");
243 , "0\n");
234244
235245 case.addCompareOutput(
236 \\pub export fn _start() u32 {
237 \\ var i: u32 = 5;
246 \\pub fn main() u8 {
247 \\ var i: u8 = 5;
238248 \\ i &= 6;
239249 \\ return i;
240250 \\}
241251 , "4\n");
242252
243253 case.addCompareOutput(
244 \\pub export fn _start() u32 {
245 \\ var i: u32 = 5;
254 \\pub fn main() u8 {
255 \\ var i: u8 = 5;
246256 \\ i |= 6;
247257 \\ return i;
248258 \\}
249259 , "7\n");
250260
251261 case.addCompareOutput(
252 \\pub export fn _start() u32 {
253 \\ var i: u32 = 5;
262 \\pub fn main() u8 {
263 \\ var i: u8 = 5;
254264 \\ i ^= 6;
255265 \\ return i;
256266 \\}
257267 , "3\n");
258268
259269 case.addCompareOutput(
260 \\pub export fn _start() bool {
270 \\pub fn main() void {
261271 \\ var b: bool = false;
262272 \\ b = b or false;
263 \\ return b;
273 \\ if (b) unreachable;
274 \\ return;
264275 \\}
265276 , "0\n");
266277
267278 case.addCompareOutput(
268 \\pub export fn _start() bool {
279 \\pub fn main() void {
269280 \\ var b: bool = true;
270281 \\ b = b or false;
271 \\ return b;
282 \\ if (!b) unreachable;
283 \\ return;
272284 \\}
273 , "1\n");
285 , "0\n");
274286
275287 case.addCompareOutput(
276 \\pub export fn _start() bool {
288 \\pub fn main() void {
277289 \\ var b: bool = false;
278290 \\ b = b or true;
279 \\ return b;
291 \\ if (!b) unreachable;
292 \\ return;
280293 \\}
281 , "1\n");
294 , "0\n");
282295
283296 case.addCompareOutput(
284 \\pub export fn _start() bool {
297 \\pub fn main() void {
285298 \\ var b: bool = true;
286299 \\ b = b or true;
287 \\ return b;
300 \\ if (!b) unreachable;
301 \\ return;
288302 \\}
289 , "1\n");
303 , "0\n");
290304
291305 case.addCompareOutput(
292 \\pub export fn _start() bool {
306 \\pub fn main() void {
293307 \\ var b: bool = false;
294308 \\ b = b and false;
295 \\ return b;
309 \\ if (b) unreachable;
310 \\ return;
296311 \\}
297312 , "0\n");
298313
299314 case.addCompareOutput(
300 \\pub export fn _start() bool {
315 \\pub fn main() void {
301316 \\ var b: bool = true;
302317 \\ b = b and false;
303 \\ return b;
318 \\ if (b) unreachable;
319 \\ return;
304320 \\}
305321 , "0\n");
306322
307323 case.addCompareOutput(
308 \\pub export fn _start() bool {
324 \\pub fn main() void {
309325 \\ var b: bool = false;
310326 \\ b = b and true;
311 \\ return b;
327 \\ if (b) unreachable;
328 \\ return;
312329 \\}
313330 , "0\n");
314331
315332 case.addCompareOutput(
316 \\pub export fn _start() bool {
333 \\pub fn main() void {
317334 \\ var b: bool = true;
318335 \\ b = b and true;
319 \\ return b;
336 \\ if (!b) unreachable;
337 \\ return;
320338 \\}
321 , "1\n");
339 , "0\n");
322340 }
323341
324342 {
325343 var case = ctx.exe("wasm conditions", wasi);
326344
327345 case.addCompareOutput(
328 \\pub export fn _start() u32 {
329 \\ var i: u32 = 5;
330 \\ if (i > @as(u32, 4)) {
346 \\pub fn main() u8 {
347 \\ var i: u8 = 5;
348 \\ if (i > @as(u8, 4)) {
331349 \\ i += 10;
332350 \\ }
333351 \\ return i;
......@@ -335,9 +353,9 @@ pub fn addCases(ctx: *TestContext) !void {
335353 , "15\n");
336354
337355 case.addCompareOutput(
338 \\pub export fn _start() u32 {
339 \\ var i: u32 = 5;
340 \\ if (i < @as(u32, 4)) {
356 \\pub fn main() u8 {
357 \\ var i: u8 = 5;
358 \\ if (i < @as(u8, 4)) {
341359 \\ i += 10;
342360 \\ } else {
343361 \\ i = 2;
......@@ -347,11 +365,11 @@ pub fn addCases(ctx: *TestContext) !void {
347365 , "2\n");
348366
349367 case.addCompareOutput(
350 \\pub export fn _start() u32 {
351 \\ var i: u32 = 5;
352 \\ if (i < @as(u32, 4)) {
368 \\pub fn main() u8 {
369 \\ var i: u8 = 5;
370 \\ if (i < @as(u8, 4)) {
353371 \\ i += 10;
354 \\ } else if(i == @as(u32, 5)) {
372 \\ } else if(i == @as(u8, 5)) {
355373 \\ i = 20;
356374 \\ }
357375 \\ return i;
......@@ -359,12 +377,12 @@ pub fn addCases(ctx: *TestContext) !void {
359377 , "20\n");
360378
361379 case.addCompareOutput(
362 \\pub export fn _start() u32 {
363 \\ var i: u32 = 11;
364 \\ if (i < @as(u32, 4)) {
380 \\pub fn main() u8 {
381 \\ var i: u8 = 11;
382 \\ if (i < @as(u8, 4)) {
365383 \\ i += 10;
366384 \\ } else {
367 \\ if (i > @as(u32, 10)) {
385 \\ if (i > @as(u8, 10)) {
368386 \\ i += 20;
369387 \\ } else {
370388 \\ i = 20;
......@@ -375,7 +393,7 @@ pub fn addCases(ctx: *TestContext) !void {
375393 , "31\n");
376394
377395 case.addCompareOutput(
378 \\pub export fn _start() void {
396 \\pub fn main() void {
379397 \\ assert(foo(true) != @as(i32, 30));
380398 \\}
381399 \\
......@@ -387,10 +405,10 @@ pub fn addCases(ctx: *TestContext) !void {
387405 \\ const x = if(ok) @as(i32, 20) else @as(i32, 10);
388406 \\ return x;
389407 \\}
390 , "");
408 , "0\n");
391409
392410 case.addCompareOutput(
393 \\pub export fn _start() void {
411 \\pub fn main() void {
394412 \\ assert(foo(false) == @as(i32, 20));
395413 \\ assert(foo(true) == @as(i32, 30));
396414 \\}
......@@ -407,16 +425,16 @@ pub fn addCases(ctx: *TestContext) !void {
407425 \\ };
408426 \\ return val + 10;
409427 \\}
410 , "");
428 , "0\n");
411429 }
412430
413431 {
414432 var case = ctx.exe("wasm while loops", wasi);
415433
416434 case.addCompareOutput(
417 \\pub export fn _start() u32 {
418 \\ var i: u32 = 0;
419 \\ while(i < @as(u32, 5)){
435 \\pub fn main() u8 {
436 \\ var i: u8 = 0;
437 \\ while(i < @as(u8, 5)){
420438 \\ i += 1;
421439 \\ }
422440 \\
......@@ -425,10 +443,10 @@ pub fn addCases(ctx: *TestContext) !void {
425443 , "5\n");
426444
427445 case.addCompareOutput(
428 \\pub export fn _start() u32 {
429 \\ var i: u32 = 0;
430 \\ while(i < @as(u32, 10)){
431 \\ var x: u32 = 1;
446 \\pub fn main() u8 {
447 \\ var i: u8 = 0;
448 \\ while(i < @as(u8, 10)){
449 \\ var x: u8 = 1;
432450 \\ i += x;
433451 \\ }
434452 \\ return i;
......@@ -436,12 +454,12 @@ pub fn addCases(ctx: *TestContext) !void {
436454 , "10\n");
437455
438456 case.addCompareOutput(
439 \\pub export fn _start() u32 {
440 \\ var i: u32 = 0;
441 \\ while(i < @as(u32, 10)){
442 \\ var x: u32 = 1;
457 \\pub fn main() u8 {
458 \\ var i: u8 = 0;
459 \\ while(i < @as(u8, 10)){
460 \\ var x: u8 = 1;
443461 \\ i += x;
444 \\ if (i == @as(u32, 5)) break;
462 \\ if (i == @as(u8, 5)) break;
445463 \\ }
446464 \\ return i;
447465 \\}
......@@ -454,7 +472,7 @@ pub fn addCases(ctx: *TestContext) !void {
454472 case.addCompareOutput(
455473 \\const Number = enum { One, Two, Three };
456474 \\
457 \\pub export fn _start() i32 {
475 \\pub fn main() void {
458476 \\ var number1 = Number.One;
459477 \\ var number2: Number = .Two;
460478 \\ if (false) {
......@@ -462,47 +480,52 @@ pub fn addCases(ctx: *TestContext) !void {
462480 \\ number2;
463481 \\ }
464482 \\ const number3 = @intToEnum(Number, 2);
465 \\
466 \\ return @enumToInt(number3);
483 \\ if (@enumToInt(number3) != 2) {
484 \\ unreachable;
485 \\ }
486 \\ return;
467487 \\}
468 , "2\n");
488 , "0\n");
469489
470490 case.addCompareOutput(
471491 \\const Number = enum { One, Two, Three };
472492 \\
473 \\pub export fn _start() i32 {
493 \\pub fn main() void {
474494 \\ var number1 = Number.One;
475495 \\ var number2: Number = .Two;
476496 \\ const number3 = @intToEnum(Number, 2);
477 \\ if (number1 == number2) return 1;
478 \\ if (number2 == number3) return 1;
479 \\ if (@enumToInt(number1) != 0) return 1;
480 \\ if (@enumToInt(number2) != 1) return 1;
481 \\ if (@enumToInt(number3) != 2) return 1;
497 \\ assert(number1 != number2);
498 \\ assert(number2 != number3);
499 \\ assert(@enumToInt(number1) == 0);
500 \\ assert(@enumToInt(number2) == 1);
501 \\ assert(@enumToInt(number3) == 2);
482502 \\ var x: Number = .Two;
483 \\ if (number2 != x) return 1;
503 \\ assert(number2 == x);
484504 \\
485 \\ return @enumToInt(number3);
505 \\ return;
486506 \\}
487 , "2\n");
507 \\fn assert(val: bool) void {
508 \\ if(!val) unreachable;
509 \\}
510 , "0\n");
488511 }
489512
490513 {
491514 var case = ctx.exe("wasm structs", wasi);
492515
493516 case.addCompareOutput(
494 \\const Example = struct { x: u32 };
517 \\const Example = struct { x: u8 };
495518 \\
496 \\pub export fn _start() u32 {
519 \\pub fn main() u8 {
497520 \\ var example: Example = .{ .x = 5 };
498521 \\ return example.x;
499522 \\}
500523 , "5\n");
501524
502525 case.addCompareOutput(
503 \\const Example = struct { x: u32 };
526 \\const Example = struct { x: u8 };
504527 \\
505 \\pub export fn _start() u32 {
528 \\pub fn main() u8 {
506529 \\ var example: Example = .{ .x = 5 };
507530 \\ example.x = 10;
508531 \\ return example.x;
......@@ -510,18 +533,18 @@ pub fn addCases(ctx: *TestContext) !void {
510533 , "10\n");
511534
512535 case.addCompareOutput(
513 \\const Example = struct { x: u32, y: u32 };
536 \\const Example = struct { x: u8, y: u8 };
514537 \\
515 \\pub export fn _start() u32 {
538 \\pub fn main() u8 {
516539 \\ var example: Example = .{ .x = 5, .y = 10 };
517540 \\ return example.y + example.x;
518541 \\}
519542 , "15\n");
520543
521544 case.addCompareOutput(
522 \\const Example = struct { x: u32, y: u32 };
545 \\const Example = struct { x: u8, y: u8 };
523546 \\
524 \\pub export fn _start() u32 {
547 \\pub fn main() u8 {
525548 \\ var example: Example = .{ .x = 5, .y = 10 };
526549 \\ var example2: Example = .{ .x = 10, .y = 20 };
527550 \\
......@@ -531,9 +554,9 @@ pub fn addCases(ctx: *TestContext) !void {
531554 , "30\n");
532555
533556 case.addCompareOutput(
534 \\const Example = struct { x: u32, y: u32 };
557 \\const Example = struct { x: u8, y: u8 };
535558 \\
536 \\pub export fn _start() u32 {
559 \\pub fn main() u8 {
537560 \\ var example: Example = .{ .x = 5, .y = 10 };
538561 \\
539562 \\ example = .{ .x = 10, .y = 20 };
......@@ -546,9 +569,9 @@ pub fn addCases(ctx: *TestContext) !void {
546569 var case = ctx.exe("wasm switch", wasi);
547570
548571 case.addCompareOutput(
549 \\pub export fn _start() u32 {
550 \\ var val: u32 = 1;
551 \\ var a: u32 = switch (val) {
572 \\pub fn main() u8 {
573 \\ var val: u8 = 1;
574 \\ var a: u8 = switch (val) {
552575 \\ 0, 1 => 2,
553576 \\ 2 => 3,
554577 \\ 3 => 4,
......@@ -560,9 +583,9 @@ pub fn addCases(ctx: *TestContext) !void {
560583 , "2\n");
561584
562585 case.addCompareOutput(
563 \\pub export fn _start() u32 {
564 \\ var val: u32 = 2;
565 \\ var a: u32 = switch (val) {
586 \\pub fn main() u8 {
587 \\ var val: u8 = 2;
588 \\ var a: u8 = switch (val) {
566589 \\ 0, 1 => 2,
567590 \\ 2 => 3,
568591 \\ 3 => 4,
......@@ -574,9 +597,9 @@ pub fn addCases(ctx: *TestContext) !void {
574597 , "3\n");
575598
576599 case.addCompareOutput(
577 \\pub export fn _start() u32 {
578 \\ var val: u32 = 10;
579 \\ var a: u32 = switch (val) {
600 \\pub fn main() u8 {
601 \\ var val: u8 = 10;
602 \\ var a: u8 = switch (val) {
580603 \\ 0, 1 => 2,
581604 \\ 2 => 3,
582605 \\ 3 => 4,
......@@ -590,9 +613,9 @@ pub fn addCases(ctx: *TestContext) !void {
590613 case.addCompareOutput(
591614 \\const MyEnum = enum { One, Two, Three };
592615 \\
593 \\pub export fn _start() u32 {
616 \\pub fn main() u8 {
594617 \\ var val: MyEnum = .Two;
595 \\ var a: u32 = switch (val) {
618 \\ var a: u8 = switch (val) {
596619 \\ .One => 1,
597620 \\ .Two => 2,
598621 \\ .Three => 3,
......@@ -607,7 +630,7 @@ pub fn addCases(ctx: *TestContext) !void {
607630 var case = ctx.exe("wasm error unions", wasi);
608631
609632 case.addCompareOutput(
610 \\pub export fn _start() void {
633 \\pub fn main() void {
611634 \\ var e1 = error.Foo;
612635 \\ var e2 = error.Bar;
613636 \\ assert(e1 != e2);
......@@ -618,32 +641,32 @@ pub fn addCases(ctx: *TestContext) !void {
618641 \\fn assert(b: bool) void {
619642 \\ if (!b) unreachable;
620643 \\}
621 , "");
644 , "0\n");
622645
623646 case.addCompareOutput(
624 \\pub export fn _start() u32 {
625 \\ var e: anyerror!u32 = 5;
647 \\pub fn main() u8 {
648 \\ var e: anyerror!u8 = 5;
626649 \\ const i = e catch 10;
627650 \\ return i;
628651 \\}
629652 , "5\n");
630653
631654 case.addCompareOutput(
632 \\pub export fn _start() u32 {
633 \\ var e: anyerror!u32 = error.Foo;
655 \\pub fn main() u8 {
656 \\ var e: anyerror!u8 = error.Foo;
634657 \\ const i = e catch 10;
635658 \\ return i;
636659 \\}
637660 , "10\n");
638661
639662 case.addCompareOutput(
640 \\pub export fn _start() u32 {
663 \\pub fn main() u8 {
641664 \\ var e = foo();
642665 \\ const i = e catch 69;
643666 \\ return i;
644667 \\}
645668 \\
646 \\fn foo() anyerror!u32 {
669 \\fn foo() anyerror!u8 {
647670 \\ return 5;
648671 \\}
649672 , "5\n");
......@@ -653,24 +676,24 @@ pub fn addCases(ctx: *TestContext) !void {
653676 var case = ctx.exe("wasm error union part 2", wasi);
654677
655678 case.addCompareOutput(
656 \\pub export fn _start() u32 {
679 \\pub fn main() u8 {
657680 \\ var e = foo();
658681 \\ const i = e catch 69;
659682 \\ return i;
660683 \\}
661684 \\
662 \\fn foo() anyerror!u32 {
685 \\fn foo() anyerror!u8 {
663686 \\ return error.Bruh;
664687 \\}
665688 , "69\n");
666689 case.addCompareOutput(
667 \\pub export fn _start() u32 {
690 \\pub fn main() u8 {
668691 \\ var e = foo();
669692 \\ const i = e catch 42;
670693 \\ return i;
671694 \\}
672695 \\
673 \\fn foo() anyerror!u32 {
696 \\fn foo() anyerror!u8 {
674697 \\ return error.Dab;
675698 \\}
676699 , "42\n");
......@@ -680,20 +703,22 @@ pub fn addCases(ctx: *TestContext) !void {
680703 var case = ctx.exe("wasm integer widening", wasi);
681704
682705 case.addCompareOutput(
683 \\pub export fn _start() u64 {
684 \\ var x: u32 = 5;
685 \\ return x;
706 \\pub fn main() void{
707 \\ var x: u8 = 5;
708 \\ var y: u64 = x;
709 \\ _ = y;
710 \\ return;
686711 \\}
687 , "5\n");
712 , "0\n");
688713 }
689714
690715 {
691716 var case = ctx.exe("wasm optionals", wasi);
692717
693718 case.addCompareOutput(
694 \\pub export fn _start() u32 {
695 \\ var x: ?u32 = 5;
696 \\ var y: u32 = 0;
719 \\pub fn main() u8 {
720 \\ var x: ?u8 = 5;
721 \\ var y: u8 = 0;
697722 \\ if (x) |val| {
698723 \\ y = val;
699724 \\ }
......@@ -702,9 +727,9 @@ pub fn addCases(ctx: *TestContext) !void {
702727 , "5\n");
703728
704729 case.addCompareOutput(
705 \\pub export fn _start() u32 {
706 \\ var x: ?u32 = null;
707 \\ var y: u32 = 0;
730 \\pub fn main() u8 {
731 \\ var x: ?u8 = null;
732 \\ var y: u8 = 0;
708733 \\ if (x) |val| {
709734 \\ y = val;
710735 \\ }
......@@ -713,23 +738,23 @@ pub fn addCases(ctx: *TestContext) !void {
713738 , "0\n");
714739
715740 case.addCompareOutput(
716 \\pub export fn _start() u32 {
717 \\ var x: ?u32 = 5;
741 \\pub fn main() u8 {
742 \\ var x: ?u8 = 5;
718743 \\ return x.?;
719744 \\}
720745 , "5\n");
721746
722747 case.addCompareOutput(
723 \\pub export fn _start() u32 {
724 \\ var x: u32 = 5;
725 \\ var y: ?u32 = x;
748 \\pub fn main() u8 {
749 \\ var x: u8 = 5;
750 \\ var y: ?u8 = x;
726751 \\ return y.?;
727752 \\}
728753 , "5\n");
729754
730755 case.addCompareOutput(
731 \\pub export fn _start() u32 {
732 \\ var val: ?u32 = 5;
756 \\pub fn main() u8 {
757 \\ var val: ?u8 = 5;
733758 \\ while (val) |*v| {
734759 \\ v.* -= 1;
735760 \\ if (v.* == 2) {
......@@ -745,32 +770,32 @@ pub fn addCases(ctx: *TestContext) !void {
745770 var case = ctx.exe("wasm pointers", wasi);
746771
747772 case.addCompareOutput(
748 \\pub export fn _start() u32 {
749 \\ var x: u32 = 0;
773 \\pub fn main() u8 {
774 \\ var x: u8 = 0;
750775 \\
751776 \\ foo(&x);
752777 \\ return x;
753778 \\}
754779 \\
755 \\fn foo(x: *u32)void {
780 \\fn foo(x: *u8)void {
756781 \\ x.* = 2;
757782 \\}
758783 , "2\n");
759784
760785 case.addCompareOutput(
761 \\pub export fn _start() u32 {
762 \\ var x: u32 = 0;
786 \\pub fn main() u8 {
787 \\ var x: u8 = 0;
763788 \\
764789 \\ foo(&x);
765790 \\ bar(&x);
766791 \\ return x;
767792 \\}
768793 \\
769 \\fn foo(x: *u32)void {
794 \\fn foo(x: *u8)void {
770795 \\ x.* = 2;
771796 \\}
772797 \\
773 \\fn bar(x: *u32) void {
798 \\fn bar(x: *u8) void {
774799 \\ x.* += 2;
775800 \\}
776801 , "4\n");