From cb6702f42d1325d3c751a74bd7e5398d404c07f4 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 21 Jul 2025 15:56:52 -0700 Subject: [PATCH] Sema: fix missed union init OPV --- src/Sema.zig | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index 8cbb17cd8b..6f7abc83c3 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -5000,9 +5000,11 @@ fn validateUnionInit( } if (init_ref) |v| try sema.validateRuntimeValue(block, block.nodeOffset(field_ptr_data.src_node), v); - const new_tag = Air.internedToRef(tag_val.toIntern()); - const set_tag_inst = try block.addBinOp(.set_union_tag, union_ptr, new_tag); - try sema.checkComptimeKnownStore(block, set_tag_inst, LazySrcLoc.unneeded); // `unneeded` since this isn't a "proper" store + if ((try sema.typeHasOnePossibleValue(tag_ty)) == null) { + const new_tag = Air.internedToRef(tag_val.toIntern()); + const set_tag_inst = try block.addBinOp(.set_union_tag, union_ptr, new_tag); + try sema.checkComptimeKnownStore(block, set_tag_inst, LazySrcLoc.unneeded); // `unneeded` since this isn't a "proper" store + } } fn validateStructInit( @@ -19690,8 +19692,10 @@ fn zirStructInit( const base_ptr = try sema.optEuBasePtrInit(block, alloc, src); const field_ptr = try sema.unionFieldPtr(block, field_src, base_ptr, field_name, field_src, resolved_ty, true); try sema.storePtr(block, src, field_ptr, init_inst); - const new_tag = Air.internedToRef(tag_val.toIntern()); - _ = try block.addBinOp(.set_union_tag, base_ptr, new_tag); + if ((try sema.typeHasOnePossibleValue(tag_ty)) == null) { + const new_tag = Air.internedToRef(tag_val.toIntern()); + _ = try block.addBinOp(.set_union_tag, base_ptr, new_tag); + } return sema.makePtrConst(block, alloc); }