aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorKrzysztof Wolicki <der.teufel.mail@gmail.com>2025-07-30 20:18:49 +0200
committerGitHub <noreply@github.com>2025-07-30 18:18:49 +0000
commit3d639481d9001df391744720b756b7f97dce2c01 (patch)
treebcb5fb9a98314ff95369def839afea8aed91451b /src/Sema.zig
parentcf7a28febbbe877003d8d4f9a13ceb94698c1e3e (diff)
downloadzig-3d639481d9001df391744720b756b7f97dce2c01.tar.gz
zig-3d639481d9001df391744720b756b7f97dce2c01.zip
Sema: disallow tags on non-auto unions when reifying (#23488)
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 2483f313a8..63c39b3bb6 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -20630,6 +20630,16 @@ fn zirReify(
}
const layout = try sema.interpretBuiltinType(block, operand_src, layout_val, std.builtin.Type.ContainerLayout);
+ const has_tag = tag_type_val.optionalValue(zcu) != null;
+
+ if (has_tag) {
+ switch (layout) {
+ .@"extern" => return sema.fail(block, src, "extern union does not support enum tag type", .{}),
+ .@"packed" => return sema.fail(block, src, "packed union does not support enum tag type", .{}),
+ .auto => {},
+ }
+ }
+
const fields_arr = try sema.derefSliceAsArray(block, operand_src, fields_val, .{ .simple = .union_fields });
return sema.reifyUnion(block, inst, src, layout, tag_type_val, fields_arr, name_strategy);