diff options
| -rw-r--r-- | src/arch/wasm/CodeGen.zig | 10 | ||||
| -rw-r--r-- | test/behavior/tuple.zig | 1 |
2 files changed, 5 insertions, 6 deletions
diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index a898d18382..21140d3fd6 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -5331,17 +5331,17 @@ fn airAggregateInit(func: *CodeGen, inst: Air.Inst.Index) InnerError!void { else => { const result = try func.allocStack(result_ty); const offset = try func.buildPointerOffset(result, 0, .new); // pointer to offset + var prev_field_offset: u64 = 0; for (elements, 0..) |elem, elem_index| { if ((try result_ty.structFieldValueComptime(mod, elem_index)) != null) continue; const elem_ty = result_ty.structFieldType(elem_index, mod); - const elem_size: u32 = @intCast(elem_ty.abiSize(mod)); + const field_offset = result_ty.structFieldOffset(elem_index, mod); + _ = try func.buildPointerOffset(offset, @intCast(field_offset - prev_field_offset), .modify); + prev_field_offset = field_offset; + const value = try func.resolveInst(elem); try func.store(offset, value, elem_ty, 0); - - if (elem_index < elements.len - 1) { - _ = try func.buildPointerOffset(offset, elem_size, .modify); - } } break :result_value result; diff --git a/test/behavior/tuple.zig b/test/behavior/tuple.zig index 48c24f26d6..d3ea307e8e 100644 --- a/test/behavior/tuple.zig +++ b/test/behavior/tuple.zig @@ -456,7 +456,6 @@ test "coerce anon tuple to tuple" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; var x: u8 = 1; var y: u16 = 2; |
