From ba5420896d67f8e09d96e37a30477d7b091e015e Mon Sep 17 00:00:00 2001 From: Pavel Verigo Date: Mon, 29 Jun 2026 00:26:31 +0200 Subject: [PATCH] Enable std tests for wasm backend again + enable field reordering Additionally remove some skips, closes #30575 --- lib/std/Io/Threaded.zig | 7 ------- lib/std/debug.zig | 1 - lib/std/fmt/float.zig | 2 -- lib/std/math/big/int_test.zig | 1 - lib/std/math/log10.zig | 1 - src/codegen/wasm/CodeGen.zig | 7 ++----- src/target.zig | 2 +- test/behavior/floatop.zig | 1 - test/behavior/struct.zig | 1 - test/tests.zig | 2 +- 10 files changed, 4 insertions(+), 21 deletions(-) diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig index 52b530c8eb11acb08083589ba865e0fa733b226c..8b4ba775b6443e570ac9dbeb558c6d249f880c48 100644 --- a/lib/std/Io/Threaded.zig +++ b/lib/std/Io/Threaded.zig @@ -14400,13 +14400,6 @@ pub fn nanosecondsFromPosix(timespec: *const posix.timespec) i96 { } fn timestampToPosix(nanoseconds: i96) posix.timespec { - if (builtin.zig_backend == .stage2_wasm) { - // Workaround for https://codeberg.org/ziglang/zig/issues/30575 - return .{ - .sec = @intCast(@divTrunc(nanoseconds, std.time.ns_per_s)), - .nsec = @intCast(@rem(nanoseconds, std.time.ns_per_s)), - }; - } return .{ .sec = @intCast(@divFloor(nanoseconds, std.time.ns_per_s)), .nsec = @intCast(@mod(nanoseconds, std.time.ns_per_s)), diff --git a/lib/std/debug.zig b/lib/std/debug.zig index 578d06fd3f5ddefdf64d8ea3af2e6b510a7513d3..a8475fdd456a1e604ada80e7f90157e05375cc88 100644 --- a/lib/std/debug.zig +++ b/lib/std/debug.zig @@ -494,7 +494,6 @@ const use_trap_panic = switch (builtin.zig_backend) { .stage2_powerpc, .stage2_riscv64, .stage2_spirv, - .stage2_wasm, .stage2_x86, => true, else => false, diff --git a/lib/std/fmt/float.zig b/lib/std/fmt/float.zig index 2d6dccf25b5b6c7cbdae3506d5aae90ff8899b45..44a71f90f42c47b608d6db65b1b7a59243680507 100644 --- a/lib/std/fmt/float.zig +++ b/lib/std/fmt/float.zig @@ -1646,8 +1646,6 @@ test "format f64" { } test "format f80" { - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; - try check(f80, 0.0, "0e0"); try check(f80, -0.0, "-0e0"); try check(f80, 1.0, "1e0"); diff --git a/lib/std/math/big/int_test.zig b/lib/std/math/big/int_test.zig index 581fd4217ab4ef7abe77016f31327b95315b0ef0..0bc1acd87670ae03cd3d2d957dc6e696dde31a19 100644 --- a/lib/std/math/big/int_test.zig +++ b/lib/std/math/big/int_test.zig @@ -2795,7 +2795,6 @@ test "bitNotWrap signed multi" { test "bitNotWrap more than two limbs" { // This test requires int sizes greater than 128 bits. - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO diff --git a/lib/std/math/log10.zig b/lib/std/math/log10.zig index 8e5366a8e3722b3f0c9999b50676987e0058f1c6..a46948cac54dddf2dd7a822a68188f219086a9af 100644 --- a/lib/std/math/log10.zig +++ b/lib/std/math/log10.zig @@ -135,7 +135,6 @@ inline fn less_than_5(x: u32) u32 { } test log10_int { - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO diff --git a/src/codegen/wasm/CodeGen.zig b/src/codegen/wasm/CodeGen.zig index 12da59f6ffd1c78f3b56c6ec6d48de4f3cbdf87a..33434649520913fd19d86c145ad5bbd8be68ce84 100644 --- a/src/codegen/wasm/CodeGen.zig +++ b/src/codegen/wasm/CodeGen.zig @@ -4345,7 +4345,7 @@ fn floatNeg(cg: *CodeGen, ty: FloatType, arg: WValue) InnerError!WValue { try cg.addMemArg(.i64_load, .{ .offset = 8 + arg.offset(), .alignment = 2 }); try cg.addImm64(0x8000); try cg.addTag(.i64_xor); - try cg.addMemArg(.i64_store16, .{ .offset = 8 + result.offset(), .alignment = 2 }); + try cg.addMemArg(.i64_store, .{ .offset = 8 + result.offset(), .alignment = 2 }); return result; }, .f128 => { @@ -6652,15 +6652,12 @@ fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { .@"packed" => unreachable, // legalize .expand_packed_aggregate_init else => { const result = try cg.allocStack(result_ty); - const offset = try cg.buildPointerOffset(result, 0, .new); // pointer to offset - var prev_field_offset: u64 = 0; for (elements, 0..) |elem, elem_index| { if (try result_ty.structFieldValueComptime(pt, elem_index) != null) continue; const elem_ty = result_ty.fieldType(elem_index, zcu); const field_offset = result_ty.structFieldOffset(elem_index, zcu); - _ = try cg.buildPointerOffset(offset, @intCast(field_offset - prev_field_offset), .modify); - prev_field_offset = field_offset; + const offset = try cg.buildPointerOffset(result, field_offset, .new); const value = try cg.resolveInst(elem); try cg.store(offset, value, elem_ty, 0); diff --git a/src/target.zig b/src/target.zig index 200591c68ebae9abba03633ec3ece7fbc88906bf..acf21d3204f54902176f1069060c346146b0430b 100644 --- a/src/target.zig +++ b/src/target.zig @@ -945,7 +945,7 @@ pub inline fn backendSupportsFeature(backend: std.lang.CompilerBackend, comptime else => false, }, .field_reordering => switch (backend) { - .stage2_aarch64, .stage2_c, .stage2_llvm, .stage2_x86_64 => true, + .stage2_aarch64, .stage2_c, .stage2_llvm, .stage2_x86_64, .stage2_wasm => true, else => false, }, .separate_thread => switch (backend) { diff --git a/test/behavior/floatop.zig b/test/behavior/floatop.zig index 2dbf47fff4d4632660d884e275b1da75420f3133..780ed846d34a1f4cc45f6fa40467b97e93a2cdb0 100644 --- a/test/behavior/floatop.zig +++ b/test/behavior/floatop.zig @@ -1544,7 +1544,6 @@ fn testNeg(comptime T: type) !void { } test "negate f80" { - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; var f: f80 = 0.0; diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig index 19342be0188f896426fe7aef5143740cc4a9987e..3384421f2a2bf08e613931b3697b5fd72078ae85 100644 --- a/test/behavior/struct.zig +++ b/test/behavior/struct.zig @@ -1484,7 +1484,6 @@ test "optional generic function label struct field" { test "struct fields get automatically reordered" { if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO const S1 = struct { diff --git a/test/tests.zig b/test/tests.zig index 6166444b9b33bdcafc034cfb26bc55aa9c48a916..62d54e981d0bef3093ee02d5be8c0de8e421a52a 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -1523,7 +1523,7 @@ const module_test_targets = blk: { .os_tag = .wasi, .abi = .none, }, - .skip_modules = &.{ "compiler-rt", "std" }, + .skip_modules = &.{"compiler-rt"}, .use_llvm = false, .use_lld = false, }, -- 2.54.0