aboutsummaryrefslogtreecommitdiff
path: root/src/AstGen.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-06-27 18:32:59 +0300
committerJakub Konka <kubkon@jakubkonka.com>2022-06-30 09:57:38 +0200
commit3204d00a5e7fe119b690e921138a439fb84dff5b (patch)
tree40dba7f0816a1a8cae35657aa0d6bcb0ec19b6ba /src/AstGen.zig
parentc248af3bdcd17c334e742d53a7ac7bda2422a688 (diff)
downloadzig-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.zig6
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,