aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-07-21 15:56:52 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-07-21 15:56:52 -0700
commitcb6702f42d1325d3c751a74bd7e5398d404c07f4 (patch)
treecabebd93b253fba53b444fd189e71a1976ac46de /src/Sema.zig
parent0958ea339129f9ed8c9c07c2c3fbb34fc758b62f (diff)
downloadzig-cb6702f42d1325d3c751a74bd7e5398d404c07f4.tar.gz
zig-cb6702f42d1325d3c751a74bd7e5398d404c07f4.zip
Sema: fix missed union init OPV
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig14
1 files 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);
}