commit 3f08073f7d2f0cd8aa086f1618a74106bf35086d (tree)
parent b27bdd5af0976d0b94819d6dda557d0dbb8f0d98
Author: Matthew Lugg <mlugg@mlugg.co.uk>
Date: Sat, 20 Dec 2025 19:01:43 +0000
x86_64: hack around more OPV bugs
I would just fix this in Sema if it were easy to do so, but this is more
like a (minor) AIR data design issue than a straightforward Sema bug.
Diffstat:
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/codegen/x86_64/CodeGen.zig b/src/codegen/x86_64/CodeGen.zig
@@ -171444,12 +171444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
const elem_dies = bt.feed();
if (tuple_type.values.get(ip)[field_index] != .none) continue;
const field_type = Type.fromInterned(tuple_type.types.get(ip)[field_index]);
- elem_disp = @intCast(field_type.abiAlignment(zcu).forward(elem_disp));
- var elem = try cg.tempFromOperand(elem_ref, elem_dies);
- try res.write(&elem, .{ .disp = elem_disp }, cg);
- try elem.die(cg);
- try cg.resetTemps(reset_index);
- elem_disp += @intCast(field_type.abiSize(zcu));
+ if (!hack_around_sema_opv_bugs or field_type.hasRuntimeBitsIgnoreComptime(zcu)) {
+ elem_disp = @intCast(field_type.abiAlignment(zcu).forward(elem_disp));
+ var elem = try cg.tempFromOperand(elem_ref, elem_dies);
+ try res.write(&elem, .{ .disp = elem_disp }, cg);
+ try elem.die(cg);
+ try cg.resetTemps(reset_index);
+ elem_disp += @intCast(field_type.abiSize(zcu));
+ }
}
},
else => return cg.fail("failed to select {s} {f}", .{