commit ef56e42a2a69e85d185257c5bd0b3f12532f2f5d (tree)
parent 3be682bac9b768ae6481ed2a07844ee8ba87a896
Author: g-w1 <58830309+g-w1@users.noreply.github.com>
Date: Sun, 27 Jun 2021 05:26:29 -0400
stage2: fix unreachable in union(enum) with anytype payload
Diffstat:
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/AstGen.zig b/src/AstGen.zig
@@ -3835,7 +3835,7 @@ fn unionDeclInner(
if (member.comptime_token) |comptime_token| {
return astgen.failTok(comptime_token, "union fields cannot be marked comptime", .{});
}
- try fields_data.ensureUnusedCapacity(gpa, 4);
+ try fields_data.ensureUnusedCapacity(gpa, if (node_tags[member.ast.type_expr] != .@"anytype") 4 else 3);
const field_name = try astgen.identAsString(member.ast.name_token);
fields_data.appendAssumeCapacity(field_name);
@@ -3850,7 +3850,7 @@ fn unionDeclInner(
(@as(u32, @boolToInt(have_value)) << 30) |
(@as(u32, @boolToInt(unused)) << 31);
- if (have_type) {
+ if (have_type and node_tags[member.ast.type_expr] != .@"anytype") {
const field_type = try typeExpr(&block_scope, &block_scope.base, member.ast.type_expr);
fields_data.appendAssumeCapacity(@enumToInt(field_type));
}
diff --git a/test/behavior/union.zig b/test/behavior/union.zig
@@ -811,3 +811,7 @@ test "union enum type gets a separate scope" {
try S.doTheTest();
}
+test "anytype union field: issue #9233" {
+ const Baz = union(enum) { bar: anytype };
+ _ = Baz;
+}