diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index c2198b65783..537895abd38 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -1835,10 +1835,8 @@ bool Parser::parseEnumSpecifier(SpecifierListAST *&node) return false; } - if (LA() == T_IDENTIFIER) + if (LA() == T_COLON_COLON && LA() == T_IDENTIFIER) parseName(ast->name); - else - return false; if (_languageFeatures.cxx11Enabled && LA() == T_COLON) { ast->colon_token = consumeToken(); diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index 509949e3c97..0cf9c7a5609 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -206,6 +206,7 @@ private slots: void invalidCode(); void enumDeclaration(); void invalidEnumClassDeclaration(); + void invalidEnumWithDestructorId(); }; void tst_AST::gcc_attributes_1() @@ -2002,6 +2003,14 @@ void tst_AST::invalidEnumClassDeclaration() QVERIFY(diag.errorCount != 0); } +void tst_AST::invalidEnumWithDestructorId() +{ + QSharedPointer unit(parseStatement( + "enum ~A {};", false)); + + QVERIFY(diag.errorCount != 0); +} + void tst_AST::initTestCase() { control.setDiagnosticClient(&diag);