summaryrefslogtreecommitdiff
path: root/src/libs/3rdparty/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorLassi Hämäläinen <lassi.m.hamalainen@gmail.com>2015-11-15 00:16:34 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-11-18 15:09:40 +0000
commit10e947f65f19ec61e29afbaf167bf3439b5bea11 (patch)
tree0198f33a7c7c7d7a5bde3417bf0ffa4435db7d6c /src/libs/3rdparty/cplusplus/Parser.cpp
parentc62ad6c450df46ace5ed9e9354ed401b51a6911b (diff)
downloadqt-creator-10e947f65f19ec61e29afbaf167bf3439b5bea11.tar.gz
C++: Fix crashes with the pattern "enum class operator A"
Parser parsed the pattern as an enum declaration the name of which is a conversion operator. Add check to disallow keywords after enum-key (enum, enum class, enum struct). Add tests tst_AST::enumDeclaration and invalidEnumClassDeclaration. Task-number: QTCREATORBUG-15341 Change-Id: Ia037f00184c1d7e5b0374f39331bb6748f8d90b1 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Parser.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 6fccebb015..901f5ac2c1 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -1789,6 +1789,11 @@ bool Parser::parseEnumSpecifier(SpecifierListAST *&node)
if (_languageFeatures.cxx11Enabled && (LA() == T_CLASS || LA() == T_STRUCT))
ast->key_token = consumeToken();
+
+ if (tok().isKeyword()) {
+ error(cursor(), "expected identifier before '%s'", tok().spell());
+ return false;
+ }
parseName(ast->name);
if (_languageFeatures.cxx11Enabled && LA() == T_COLON) {