authorgravatar for xavierb@gmail.comXavier Bouchoux <xavierb@gmail.com> 2023-10-13 22:26:09+02:00
committergravatar for xavierb@gmail.comXavier Bouchoux <xavierb@gmail.com> 2023-10-14 10:23:36+02:00
log27a19908edb3916344f4c41899a4a9c9a53a1528
tree069788a6c857c7d0c51ea2e9c9574aa714123348
parent895c81ce72430be818befefa56046d966c01f8ea

codegen/wasm: fix tuple member offset computation

It didn't account for field alignement.

2 files changed, 5 insertions(+), 6 deletions(-)

src/arch/wasm/CodeGen.zig+5-5
......@@ -5331,17 +5331,17 @@ fn airAggregateInit(func: *CodeGen, inst: Air.Inst.Index) InnerError!void {
53315331 else => {
53325332 const result = try func.allocStack(result_ty);
53335333 const offset = try func.buildPointerOffset(result, 0, .new); // pointer to offset
5334 var prev_field_offset: u64 = 0;
53345335 for (elements, 0..) |elem, elem_index| {
53355336 if ((try result_ty.structFieldValueComptime(mod, elem_index)) != null) continue;
53365337
53375338 const elem_ty = result_ty.structFieldType(elem_index, mod);
5338 const elem_size: u32 = @intCast(elem_ty.abiSize(mod));
5339 const field_offset = result_ty.structFieldOffset(elem_index, mod);
5340 _ = try func.buildPointerOffset(offset, @intCast(field_offset - prev_field_offset), .modify);
5341 prev_field_offset = field_offset;
5342
53395343 const value = try func.resolveInst(elem);
53405344 try func.store(offset, value, elem_ty, 0);
5341
5342 if (elem_index < elements.len - 1) {
5343 _ = try func.buildPointerOffset(offset, elem_size, .modify);
5344 }
53455345 }
53465346
53475347 break :result_value result;
test/behavior/tuple.zig-1
......@@ -456,7 +456,6 @@ test "coerce anon tuple to tuple" {
456456 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
457457 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
458458 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
459 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
460459
461460 var x: u8 = 1;
462461 var y: u16 = 2;