stage2: fix unreachable in union(enum) with anytype payload

This commit is contained in:
g-w1 2021-06-27 05:26:29 -04:00 committed by GitHub
parent 3be682bac9
commit ef56e42a2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 2 deletions

View File

@ -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));
}

View File

@ -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;
}