Skip to content

Commit dc431a3

Browse files
author
Lukas Neubert
authored
checker: prevent enum value duplication check bypass (#10287)
1 parent e54af19 commit dc431a3

File tree

5 files changed

+15
-2
lines changed

5 files changed

+15
-2
lines changed

vlib/v/checker/checker.v

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3208,6 +3208,8 @@ pub fn (mut c Checker) enum_decl(decl ast.EnumDecl) {
32083208
last := seen[seen.len - 1]
32093209
if last == checker.int_max {
32103210
c.error('enum value overflows', field.pos)
3211+
} else if !decl.is_multi_allowed && last + 1 in seen {
3212+
c.error('enum value `${last + 1}` already exists', field.pos)
32113213
}
32123214
seen << last + 1
32133215
} else {

vlib/v/checker/tests/enum_field_value_duplicate_err.out renamed to vlib/v/checker/tests/enum_field_value_duplicate_a.out

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
vlib/v/checker/tests/enum_field_value_duplicate_err.vv:3:10: error: enum value `0` already exists
1+
vlib/v/checker/tests/enum_field_value_duplicate_a.vv:3:10: error: enum value `0` already exists
22
1 | enum Color {
33
2 | red
44
3 | green = 0
55
| ^
66
4 | blue = 1
77
5 | alpha = 1
8-
vlib/v/checker/tests/enum_field_value_duplicate_err.vv:5:10: error: enum value `1` already exists
8+
vlib/v/checker/tests/enum_field_value_duplicate_a.vv:5:10: error: enum value `1` already exists
99
3 | green = 0
1010
4 | blue = 1
1111
5 | alpha = 1
File renamed without changes.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
vlib/v/checker/tests/enum_field_value_duplicate_b.vv:4:2: error: enum value `0` already exists
2+
2 | red // 0
3+
3 | green = -1
4+
4 | blue // -1 + 1 = 0
5+
| ~~~~
6+
5 | }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
enum Color {
2+
red // 0
3+
green = -1
4+
blue // -1 + 1 = 0
5+
}

0 commit comments

Comments
 (0)