aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/InternPool.zig2
-rw-r--r--src/arch/x86_64/CodeGen.zig5
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;
}