aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/stage1/analyze.cpp3
-rw-r--r--test/stage1/behavior/union.zig15
2 files changed, 17 insertions, 1 deletions
diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp
index 40a294e8d8..fd82a30ce0 100644
--- a/src/stage1/analyze.cpp
+++ b/src/stage1/analyze.cpp
@@ -3281,7 +3281,8 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {
tag_type->data.enumeration.src_field_count = field_count;
tag_type->data.enumeration.fields = heap::c_allocator.allocate<TypeEnumField>(field_count);
tag_type->data.enumeration.fields_by_name.init(field_count);
- tag_type->data.enumeration.decls_scope = union_type->data.unionation.decls_scope;
+ tag_type->data.enumeration.decls_scope = create_decls_scope(
+ g, nullptr, nullptr, tag_type, get_scope_import(scope), &tag_type->name);
} else if (enum_type_node != nullptr) {
tag_type = analyze_type_expr(g, scope, enum_type_node);
} else {
diff --git a/test/stage1/behavior/union.zig b/test/stage1/behavior/union.zig
index b243cee11e..d350ae369a 100644
--- a/test/stage1/behavior/union.zig
+++ b/test/stage1/behavior/union.zig
@@ -761,3 +761,18 @@ test "@unionInit on union w/ tag but no fields" {
S.doTheTest();
comptime S.doTheTest();
}
+
+test "union enum type gets a separate scope" {
+ const S = struct {
+ const U = union(enum) {
+ a: u8,
+ const foo = 1;
+ };
+
+ fn doTheTest() void {
+ expect(!@hasDecl(@TagType(U), "foo"));
+ }
+ };
+
+ S.doTheTest();
+}