diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/InternPool.zig | 2 | ||||
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/InternPool.zig b/src/InternPool.zig index 700c5859b8..b70034641e 100644 --- a/src/InternPool.zig +++ b/src/InternPool.zig @@ -1887,7 +1887,7 @@ pub fn loadUnionType(ip: *InternPool, key: Key.UnionType) UnionType { .namespace = type_union.data.namespace, .enum_tag_ty = enum_ty, .int_tag_ty = enum_info.tag_ty, - .size = type_union.data.padding, + .size = type_union.data.size, .padding = type_union.data.padding, .field_names = enum_info.names, .names_map = enum_info.names_map, diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 9d4ee182c4..16a4b4a7f4 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -15323,10 +15323,11 @@ fn airUnionInit(self: *Self, inst: Air.Inst.Index) !void { const src_ty = self.typeOf(extra.init); const src_mcv = try self.resolveInst(extra.init); if (layout.tag_size == 0) { - if (self.reuseOperand(inst, extra.init, 0, src_mcv)) break :result src_mcv; + if (layout.abi_size <= src_ty.abiSize(mod) and + self.reuseOperand(inst, extra.init, 0, src_mcv)) break :result src_mcv; const dst_mcv = try self.allocRegOrMem(inst, true); - try self.genCopy(union_ty, dst_mcv, src_mcv); + try self.genCopy(src_ty, dst_mcv, src_mcv); break :result dst_mcv; } |
