diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-06-27 18:32:59 +0300 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-06-30 09:57:38 +0200 |
| commit | 3204d00a5e7fe119b690e921138a439fb84dff5b (patch) | |
| tree | 40dba7f0816a1a8cae35657aa0d6bcb0ec19b6ba /src/AstGen.zig | |
| parent | c248af3bdcd17c334e742d53a7ac7bda2422a688 (diff) | |
| download | zig-3204d00a5e7fe119b690e921138a439fb84dff5b.tar.gz zig-3204d00a5e7fe119b690e921138a439fb84dff5b.zip | |
move passing stage1 compile error tests to stage2
Diffstat (limited to 'src/AstGen.zig')
| -rw-r--r-- | src/AstGen.zig | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig index ec8af65614..c4cba54bdc 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -4464,6 +4464,7 @@ fn containerDecl( var total_fields: usize = 0; var decls: usize = 0; var nonexhaustive_node: Ast.Node.Index = 0; + var nonfinal_nonexhaustive = false; for (container_decl.ast.members) |member_node| { const member = switch (node_tags[member_node]) { .container_field_init => tree.containerFieldInit(member_node), @@ -4515,6 +4516,8 @@ fn containerDecl( return astgen.failNode(member.ast.value_expr, "'_' is used to mark an enum as non-exhaustive and cannot be assigned a value", .{}); } continue; + } else if (nonexhaustive_node != 0) { + nonfinal_nonexhaustive = true; } total_fields += 1; if (member.ast.value_expr != 0) { @@ -4524,6 +4527,9 @@ fn containerDecl( values += 1; } } + if (nonfinal_nonexhaustive) { + return astgen.failNode(nonexhaustive_node, "'_' field of non-exhaustive enum must be last", .{}); + } break :blk .{ .total_fields = total_fields, .values = values, |
