authorgravatar for paul.verigo@gmail.comPavel Verigo <paul.verigo@gmail.com> 2025-12-05 22:51:05+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-12-07 07:21:15+01:00
logbf58a3bc082a7d305df082360ef93316d8c8dfd6
treeab5fde52c7d27f8dfa2fb4720a421929c70b5080
parentcc099afca557ae427261ab0c5c733738d9d87782

stage2_wasm: revival, enabling tests


9 files changed, 23 insertions(+), 18 deletions(-)

src/codegen/wasm/Emit.zig+1-1
...@@ -85,7 +85,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {...@@ -85,7 +85,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
85 if (is_obj) {85 if (is_obj) {
86 @panic("TODO");86 @panic("TODO");
87 } else {87 } else {
88 writeUleb128(code, 1 + @intFromEnum(indirect_func_idx));88 writeSleb128(code, 1 + @intFromEnum(indirect_func_idx));
89 }89 }
90 inst += 1;90 inst += 1;
91 continue :loop tags[inst];91 continue :loop tags[inst];
src/link/Wasm/Flush.zig+4-1
...@@ -933,6 +933,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {...@@ -933,6 +933,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
933 var segment_offset: u32 = 0;933 var segment_offset: u32 = 0;
934 var group_start_addr: u32 = data_vaddr;934 var group_start_addr: u32 = data_vaddr;
935 var group_end_addr = f.data_segment_groups.items[group_index].end_addr;935 var group_end_addr = f.data_segment_groups.items[group_index].end_addr;
936 var first_segment_in_group = true;
936 for (segment_ids, segment_vaddrs) |segment_id, segment_vaddr| {937 for (segment_ids, segment_vaddrs) |segment_id, segment_vaddr| {
937 if (segment_vaddr >= group_end_addr) {938 if (segment_vaddr >= group_end_addr) {
938 try binary_bytes.appendNTimes(gpa, 0, group_end_addr - group_start_addr - segment_offset);939 try binary_bytes.appendNTimes(gpa, 0, group_end_addr - group_start_addr - segment_offset);
...@@ -944,8 +945,10 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {...@@ -944,8 +945,10 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
944 group_start_addr = group_end_addr;945 group_start_addr = group_end_addr;
945 group_end_addr = f.data_segment_groups.items[group_index].end_addr;946 group_end_addr = f.data_segment_groups.items[group_index].end_addr;
946 segment_offset = 0;947 segment_offset = 0;
948 first_segment_in_group = true;
947 }949 }
948 if (segment_offset == 0) {950 if (first_segment_in_group) {
951 first_segment_in_group = false;
949 const group_size = group_end_addr - group_start_addr;952 const group_size = group_end_addr - group_start_addr;
950 log.debug("emit data section group, {d} bytes", .{group_size});953 log.debug("emit data section group, {d} bytes", .{group_size});
951 const flags: Object.DataSegmentFlags = if (segment_id.isPassive(wasm)) .passive else .active;954 const flags: Object.DataSegmentFlags = if (segment_id.isPassive(wasm)) .passive else .active;
test/behavior/enum.zig+1
...@@ -1066,6 +1066,7 @@ test "tag name with signed enum values" {...@@ -1066,6 +1066,7 @@ test "tag name with signed enum values" {
1066test "tag name with large enum values" {1066test "tag name with large enum values" {
1067 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1067 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1068 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;1068 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1069 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
10691070
1070 const Kdf = enum(u128) {1071 const Kdf = enum(u128) {
1071 aes_kdf = 0xea4f8ac1080d74bf60448a629af3d9c9,1072 aes_kdf = 0xea4f8ac1080d74bf60448a629af3d9c9,
test/behavior/field_parent_ptr.zig+3
...@@ -1033,6 +1033,7 @@ test "@fieldParentPtr packed struct first zero-bit field" {...@@ -1033,6 +1033,7 @@ test "@fieldParentPtr packed struct first zero-bit field" {
1033 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1033 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
1034 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1034 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1035 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1035 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1036 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
10361037
1037 const C = packed struct {1038 const C = packed struct {
1038 a: u0 = 0,1039 a: u0 = 0,
...@@ -1139,6 +1140,7 @@ test "@fieldParentPtr packed struct middle zero-bit field" {...@@ -1139,6 +1140,7 @@ test "@fieldParentPtr packed struct middle zero-bit field" {
1139 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1140 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
1140 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1141 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1141 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1142 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1143 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
11421144
1143 const C = packed struct {1145 const C = packed struct {
1144 a: f32 = 3.14,1146 a: f32 = 3.14,
...@@ -1245,6 +1247,7 @@ test "@fieldParentPtr packed struct last zero-bit field" {...@@ -1245,6 +1247,7 @@ test "@fieldParentPtr packed struct last zero-bit field" {
1245 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;1247 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
1246 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;1248 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
1247 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1249 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1250 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
12481251
1249 const C = packed struct {1252 const C = packed struct {
1250 a: f32 = 3.14,1253 a: f32 = 3.14,
test/behavior/struct.zig+1
...@@ -749,6 +749,7 @@ test "packed struct with fp fields" {...@@ -749,6 +749,7 @@ test "packed struct with fp fields" {
749 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;749 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
750 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;750 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
751 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;751 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
752 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
752753
753 const S = packed struct {754 const S = packed struct {
754 data0: f32,755 data0: f32,
test/behavior/union.zig+1
...@@ -2217,6 +2217,7 @@ test "matching captures causes union equivalence" {...@@ -2217,6 +2217,7 @@ test "matching captures causes union equivalence" {
2217test "signed enum tag with negative value" {2217test "signed enum tag with negative value" {
2218 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO2218 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
2219 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;2219 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
2220 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
2220 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;2221 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
22212222
2222 const Enum = enum(i8) {2223 const Enum = enum(i8) {
test/behavior/vector.zig+2
...@@ -9,6 +9,7 @@ const expectEqual = std.testing.expectEqual;...@@ -9,6 +9,7 @@ const expectEqual = std.testing.expectEqual;
9test "implicit cast vector to array - bool" {9test "implicit cast vector to array - bool" {
10 if (builtin.cpu.arch == .aarch64_be and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;10 if (builtin.cpu.arch == .aarch64_be and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;11 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
12 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
1213
13 const S = struct {14 const S = struct {
14 fn doTheTest() !void {15 fn doTheTest() !void {
...@@ -32,6 +33,7 @@ test "implicit cast vector to array - bool" {...@@ -32,6 +33,7 @@ test "implicit cast vector to array - bool" {
3233
33test "implicit cast array to vector - bool" {34test "implicit cast array to vector - bool" {
34 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;35 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
36 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
3537
36 const S = struct {38 const S = struct {
37 fn doTheTest() !void {39 fn doTheTest() !void {
test/src/Cases.zig-4
...@@ -370,10 +370,6 @@ fn addFromDirInner(...@@ -370,10 +370,6 @@ fn addFromDirInner(
370 const resolved_target = b.resolveTargetQuery(target_query);370 const resolved_target = b.resolveTargetQuery(target_query);
371 const target = &resolved_target.result;371 const target = &resolved_target.result;
372 for (backends) |backend| {372 for (backends) |backend| {
373 if (backend == .selfhosted and target.cpu.arch == .wasm32) {
374 // https://github.com/ziglang/zig/issues/25684
375 continue;
376 }
377 if (backend == .selfhosted and373 if (backend == .selfhosted and
378 target.cpu.arch != .aarch64 and target.cpu.arch != .wasm32 and target.cpu.arch != .x86_64 and target.cpu.arch != .spirv64)374 target.cpu.arch != .aarch64 and target.cpu.arch != .wasm32 and target.cpu.arch != .x86_64 and target.cpu.arch != .spirv64)
379 {375 {
test/tests.zig+10-12
...@@ -1381,18 +1381,16 @@ const test_targets = blk: {...@@ -1381,18 +1381,16 @@ const test_targets = blk: {
13811381
1382 // WASI Targets1382 // WASI Targets
13831383
1384 // Disabled due to no active maintainer (feel free to fix the failures1384 .{
1385 // and then re-enable at any time). The failures occur due to backend1385 .target = .{
1386 // miscompilation of different AIR from the frontend.1386 .cpu_arch = .wasm32,
1387 //.{1387 .os_tag = .wasi,
1388 // .target = .{1388 .abi = .none,
1389 // .cpu_arch = .wasm32,1389 },
1390 // .os_tag = .wasi,1390 .skip_modules = &.{ "compiler-rt", "std" },
1391 // .abi = .none,1391 .use_llvm = false,
1392 // },1392 .use_lld = false,
1393 // .use_llvm = false,1393 },
1394 // .use_lld = false,
1395 //},
1396 .{1394 .{
1397 .target = .{1395 .target = .{
1398 .cpu_arch = .wasm32,1396 .cpu_arch = .wasm32,