aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/x86_64/CodeGen.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen/x86_64/CodeGen.zig')
-rw-r--r--src/codegen/x86_64/CodeGen.zig14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/codegen/x86_64/CodeGen.zig b/src/codegen/x86_64/CodeGen.zig
index f27b28a3b2..7e8e78334a 100644
--- 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}", .{