Commit ef56e42a2a

g-w1 <58830309+g-w1@users.noreply.github.com>
2021-06-27 11:26:29
stage2: fix unreachable in union(enum) with anytype payload
1 parent 3be682b
Changed files (2)
src
test
behavior
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));
         }
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;
+}