From ef56e42a2a69e85d185257c5bd0b3f12532f2f5d Mon Sep 17 00:00:00 2001 From: g-w1 <58830309+g-w1@users.noreply.github.com> Date: Sun, 27 Jun 2021 05:26:29 -0400 Subject: [PATCH] stage2: fix unreachable in union(enum) with anytype payload --- src/AstGen.zig | 4 ++-- test/behavior/union.zig | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/AstGen.zig b/src/AstGen.zig index bcfb5a45b7..4254481a55 100644 --- 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 index f7c0c93696..323dd18f4d 100644 --- 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; +}