forked from qt-creator/qt-creator
C++11: Fix parsing of ambiguous declarators.
Task-number: QTCREATORBUG-7921 Change-Id: Ia94c30886321e09028547a47f83d2a0c57f3980f Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
1
src/libs/3rdparty/cplusplus/AST.h
vendored
1
src/libs/3rdparty/cplusplus/AST.h
vendored
@@ -1461,6 +1461,7 @@ public:
|
|||||||
unsigned ref_qualifier_token;
|
unsigned ref_qualifier_token;
|
||||||
ExceptionSpecificationAST *exception_specification;
|
ExceptionSpecificationAST *exception_specification;
|
||||||
TrailingReturnTypeAST *trailing_return_type;
|
TrailingReturnTypeAST *trailing_return_type;
|
||||||
|
// Some FunctionDeclarators can also be interpreted as an initializer, like for 'A b(c);'
|
||||||
ExpressionAST *as_cpp_initializer;
|
ExpressionAST *as_cpp_initializer;
|
||||||
|
|
||||||
public: // annotations
|
public: // annotations
|
||||||
|
|||||||
7
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
7
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
@@ -1491,11 +1491,12 @@ bool Parser::parseDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_specif
|
|||||||
|
|
||||||
bool blocked = blockErrors(true);
|
bool blocked = blockErrors(true);
|
||||||
if (parseInitializer(initializer, &node->equal_token)) {
|
if (parseInitializer(initializer, &node->equal_token)) {
|
||||||
NestedExpressionAST *expr = 0;
|
// maybe the initializer also parses as a FunctionDeclarator?
|
||||||
|
ExpressionListParenAST *expr = 0;
|
||||||
if (initializer)
|
if (initializer)
|
||||||
expr = initializer->asNestedExpression();
|
expr = initializer->asExpressionListParen();
|
||||||
if (expr) {
|
if (expr) {
|
||||||
if (expr->expression && expr->rparen_token && (LA() == T_COMMA || LA() == T_SEMICOLON)) {
|
if (expr->expression_list && expr->rparen_token && (LA() == T_COMMA || LA() == T_SEMICOLON)) {
|
||||||
rewind(lparen_token);
|
rewind(lparen_token);
|
||||||
|
|
||||||
// check for ambiguous declarators.
|
// check for ambiguous declarators.
|
||||||
|
|||||||
Reference in New Issue
Block a user