commit ba5420896d67f8e09d96e37a30477d7b091e015e (tree)
parent 4c9d06416c1f0e4e7bf5139a705c50ad18f9c39a
Author: Pavel Verigo <paul.verigo@gmail.com>
Date: Mon, 29 Jun 2026 00:26:31 +0200
Enable std tests for wasm backend again + enable field reordering
Additionally remove some skips, closes #30575
Diffstat:
10 files changed, 4 insertions(+), 21 deletions(-)
diff --git 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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,
},