authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-21 15:56:52-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-21 15:56:52-07:00
logcb6702f42d1325d3c751a74bd7e5398d404c07f4
treecabebd93b253fba53b444fd189e71a1976ac46de
parent0958ea339129f9ed8c9c07c2c3fbb34fc758b62f

Sema: fix missed union init OPV


1 files changed, 9 insertions(+), 5 deletions(-)

src/Sema.zig+9-5
...@@ -5000,9 +5000,11 @@ fn validateUnionInit(...@@ -5000,9 +5000,11 @@ fn validateUnionInit(
5000 }5000 }
5001 if (init_ref) |v| try sema.validateRuntimeValue(block, block.nodeOffset(field_ptr_data.src_node), v);5001 if (init_ref) |v| try sema.validateRuntimeValue(block, block.nodeOffset(field_ptr_data.src_node), v);
50025002
5003 const new_tag = Air.internedToRef(tag_val.toIntern());5003 if ((try sema.typeHasOnePossibleValue(tag_ty)) == null) {
5004 const set_tag_inst = try block.addBinOp(.set_union_tag, union_ptr, new_tag);5004 const new_tag = Air.internedToRef(tag_val.toIntern());
5005 try sema.checkComptimeKnownStore(block, set_tag_inst, LazySrcLoc.unneeded); // `unneeded` since this isn't a "proper" store5005 const set_tag_inst = try block.addBinOp(.set_union_tag, union_ptr, new_tag);
5006 try sema.checkComptimeKnownStore(block, set_tag_inst, LazySrcLoc.unneeded); // `unneeded` since this isn't a "proper" store
5007 }
5006}5008}
50075009
5008fn validateStructInit(5010fn validateStructInit(
...@@ -19690,8 +19692,10 @@ fn zirStructInit(...@@ -19690,8 +19692,10 @@ fn zirStructInit(
19690 const base_ptr = try sema.optEuBasePtrInit(block, alloc, src);19692 const base_ptr = try sema.optEuBasePtrInit(block, alloc, src);
19691 const field_ptr = try sema.unionFieldPtr(block, field_src, base_ptr, field_name, field_src, resolved_ty, true);19693 const field_ptr = try sema.unionFieldPtr(block, field_src, base_ptr, field_name, field_src, resolved_ty, true);
19692 try sema.storePtr(block, src, field_ptr, init_inst);19694 try sema.storePtr(block, src, field_ptr, init_inst);
19693 const new_tag = Air.internedToRef(tag_val.toIntern());19695 if ((try sema.typeHasOnePossibleValue(tag_ty)) == null) {
19694 _ = try block.addBinOp(.set_union_tag, base_ptr, new_tag);19696 const new_tag = Air.internedToRef(tag_val.toIntern());
19697 _ = try block.addBinOp(.set_union_tag, base_ptr, new_tag);
19698 }
19695 return sema.makePtrConst(block, alloc);19699 return sema.makePtrConst(block, alloc);
19696 }19700 }
1969719701