From de975aca4f08141b1c6475e58f5cfa316fdd1350 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 9 Oct 2018 11:59:43 +0200 Subject: C++: Fix parsing enum specifier The enum name has to be an identifier. For the example in the referenced report it was a destructor, which violated invariants in the lookup code. Fixes: QTCREATORBUG-20952 Change-Id: Ib8c9c23d6e001368c11c6a4b80c4295559786823 Reviewed-by: Ivan Donchevskii --- src/libs/3rdparty/cplusplus/Parser.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/libs/3rdparty') diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp index 05ac110245..c2198b6578 100644 --- a/src/libs/3rdparty/cplusplus/Parser.cpp +++ b/src/libs/3rdparty/cplusplus/Parser.cpp @@ -1834,7 +1834,11 @@ bool Parser::parseEnumSpecifier(SpecifierListAST *&node) error(cursor(), "expected identifier before '%s'", tok().spell()); return false; } - parseName(ast->name); + + if (LA() == T_IDENTIFIER) + parseName(ast->name); + else + return false; if (_languageFeatures.cxx11Enabled && LA() == T_COLON) { ast->colon_token = consumeToken(); -- cgit v1.2.3