diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 6db0b9c2b4..e1356d5489 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -974,7 +974,12 @@ pub fn (mut c Checker) return_stmt(return_stmt mut ast.Return) { } pub fn (mut c Checker) enum_decl(decl ast.EnumDecl) { - for field in decl.fields { + for i, field in decl.fields { + for j in 0..i { + if field.name == decl.fields[j].name { + c.error('field name `$field.name` duplicate', field.pos) + } + } if field.has_expr { match field.expr { ast.IntegerLiteral {} diff --git a/vlib/v/checker/tests/enum_field_name_duplicate_err.out b/vlib/v/checker/tests/enum_field_name_duplicate_err.out new file mode 100644 index 0000000000..78127597d4 --- /dev/null +++ b/vlib/v/checker/tests/enum_field_name_duplicate_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/enum_field_name_duplicate_err.v:5:2: error: field name `green` duplicate + 3| yellow + 4| blue + 5| green + ~~~~~ + 6| } + 7| \ No newline at end of file diff --git a/vlib/v/checker/tests/enum_field_name_duplicate_err.vv b/vlib/v/checker/tests/enum_field_name_duplicate_err.vv new file mode 100644 index 0000000000..790d39d55d --- /dev/null +++ b/vlib/v/checker/tests/enum_field_name_duplicate_err.vv @@ -0,0 +1,10 @@ +enum Color { + green + yellow + blue + green +} + +fn main(){ + println('hello') +}