From aac1bebacec384a0f8dd7053c06cb3418f88c722 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 23 Oct 2018 08:24:06 +0200 Subject: [PATCH] C++: Fix parsing enum specifier II This amends the obviously wrong de975aca4f08141b1c6475e58f5cfa316fdd1350, which did not honored nameless enum specifiers. This fixes e.g. "Find Usages" for declarations following "enum {};". Change-Id: Id98c074156f576b9a63e6c25dab38721ca34e496 Reviewed-by: hjk Reviewed-by: Ivan Donchevskii --- src/libs/3rdparty/cplusplus/Parser.cpp | 4 +--- tests/auto/cplusplus/ast/tst_ast.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) 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);