authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-12-20 19:01:43+00:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-12-21 13:07:00+00:00
log3f08073f7d2f0cd8aa086f1618a74106bf35086d
tree9346e16f57883ffb87201fd1e8148d79622ec47b
parentb27bdd5af0976d0b94819d6dda557d0dbb8f0d98
signaturelock-open Commit is signed but in an unrecognized format.

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.

1 files changed, 8 insertions(+), 6 deletions(-)

src/codegen/x86_64/CodeGen.zig+8-6
...@@ -171444,12 +171444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -171444,12 +171444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171444 const elem_dies = bt.feed();171444 const elem_dies = bt.feed();
171445 if (tuple_type.values.get(ip)[field_index] != .none) continue;171445 if (tuple_type.values.get(ip)[field_index] != .none) continue;
171446 const field_type = Type.fromInterned(tuple_type.types.get(ip)[field_index]);171446 const field_type = Type.fromInterned(tuple_type.types.get(ip)[field_index]);
171447 elem_disp = @intCast(field_type.abiAlignment(zcu).forward(elem_disp));171447 if (!hack_around_sema_opv_bugs or field_type.hasRuntimeBitsIgnoreComptime(zcu)) {
171448 var elem = try cg.tempFromOperand(elem_ref, elem_dies);171448 elem_disp = @intCast(field_type.abiAlignment(zcu).forward(elem_disp));
171449 try res.write(&elem, .{ .disp = elem_disp }, cg);171449 var elem = try cg.tempFromOperand(elem_ref, elem_dies);
171450 try elem.die(cg);171450 try res.write(&elem, .{ .disp = elem_disp }, cg);
171451 try cg.resetTemps(reset_index);171451 try elem.die(cg);
171452 elem_disp += @intCast(field_type.abiSize(zcu));171452 try cg.resetTemps(reset_index);
171453 elem_disp += @intCast(field_type.abiSize(zcu));
171454 }
171453 }171455 }
171454 },171456 },
171455 else => return cg.fail("failed to select {s} {f}", .{171457 else => return cg.fail("failed to select {s} {f}", .{