diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp index 70f6cabe7..159238a69 100644 --- a/src/idl_parser.cpp +++ b/src/idl_parser.cpp @@ -2035,10 +2035,18 @@ CheckedError Parser::ParseProtoDecl() { // Temp: remove any duplicates, as .fbs files can't handle them. for (auto it = v.begin(); it != v.end();) { - if (it != v.begin() && it[0]->value == it[-1]->value) + if (it != v.begin() && it[0]->value == it[-1]->value) { + auto ref = it[-1]; + auto ev = it[0]; + for (auto dit = enum_def->vals.dict.begin(); + dit != enum_def->vals.dict.end(); ++dit) { + if (dit->second == ev) dit->second = ref; // reassign + } + delete ev; // delete enum value it = v.erase(it); - else + } else { ++it; + } } } else if (IsIdent("syntax")) { // Skip these. NEXT(); diff --git a/tests/prototest/test.golden b/tests/prototest/test.golden index ad59295a2..cf861b9bb 100644 --- a/tests/prototest/test.golden +++ b/tests/prototest/test.golden @@ -4,6 +4,7 @@ namespace proto.test; /// Enum doc comment. enum ProtoEnum : int { + NUL = 0, FOO = 1, /// Enum 2nd value doc comment misaligned. BAR = 5, diff --git a/tests/prototest/test.proto b/tests/prototest/test.proto index df264a1a0..45ce6c0e4 100644 --- a/tests/prototest/test.proto +++ b/tests/prototest/test.proto @@ -8,6 +8,7 @@ package proto.test; /// Enum doc comment. enum ProtoEnum { option allow_alias = true; + NUL = 0; FOO = 1; /// Enum 2nd value doc comment misaligned. BAR = 5; diff --git a/tests/prototest/test_union.golden b/tests/prototest/test_union.golden index 33fa0849e..18270eb53 100644 --- a/tests/prototest/test_union.golden +++ b/tests/prototest/test_union.golden @@ -4,6 +4,7 @@ namespace proto.test; /// Enum doc comment. enum ProtoEnum : int { + NUL = 0, FOO = 1, /// Enum 2nd value doc comment misaligned. BAR = 5,