diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-11-06 07:27:55 -0500 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-11-06 14:11:31 -0500 |
| commit | 9ced27dace99da1f2bc704b4d5a7fabe9a62eca4 (patch) | |
| tree | acaf279fce16c96e3efdd1fd2d648516264a9893 /src/arch/x86_64/CodeGen.zig | |
| parent | 62e67a2b565e20f684319f5e59e1bddd79c988d3 (diff) | |
| download | zig-9ced27dace99da1f2bc704b4d5a7fabe9a62eca4.tar.gz zig-9ced27dace99da1f2bc704b4d5a7fabe9a62eca4.zip | |
x86_64: fix passing register-sized payload as non-reigster-sized union
Closes #17885
Diffstat (limited to 'src/arch/x86_64/CodeGen.zig')
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 5 |
1 files changed, 3 insertions, 2 deletions
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; } |
