aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/3rdparty/cplusplus/AST.cpp6
-rw-r--r--src/libs/3rdparty/cplusplus/AST.h2
-rw-r--r--src/libs/3rdparty/cplusplus/ASTClone.cpp2
-rw-r--r--src/libs/3rdparty/cplusplus/ASTMatcher.cpp5
-rw-r--r--src/libs/3rdparty/cplusplus/ASTPatternBuilder.h3
-rw-r--r--src/libs/3rdparty/cplusplus/ASTVisit.cpp1
-rw-r--r--src/libs/3rdparty/cplusplus/Bind.cpp1
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp6
-rw-r--r--src/libs/cplusplus/FindUsages.cpp1
-rw-r--r--tests/auto/cplusplus/cxx11/data/rangeFor.1.cpp5
-rw-r--r--tests/auto/cplusplus/cxx11/tst_cxx11.cpp1
-rw-r--r--tests/tools/cplusplus-dump/dumpers.inc1
12 files changed, 12 insertions, 22 deletions
diff --git a/src/libs/3rdparty/cplusplus/AST.cpp b/src/libs/3rdparty/cplusplus/AST.cpp
index c3e6e7c6a43..2057a8372e2 100644
--- a/src/libs/3rdparty/cplusplus/AST.cpp
+++ b/src/libs/3rdparty/cplusplus/AST.cpp
@@ -4362,9 +4362,6 @@ unsigned RangeBasedForStatementAST::firstToken() const
if (declarator)
if (unsigned candidate = declarator->firstToken())
return candidate;
- if (initializer)
- if (unsigned candidate = initializer->firstToken())
- return candidate;
if (colon_token)
return colon_token;
if (expression)
@@ -4391,9 +4388,6 @@ unsigned RangeBasedForStatementAST::lastToken() const
return candidate;
if (colon_token)
return colon_token + 1;
- if (initializer)
- if (unsigned candidate = initializer->lastToken())
- return candidate;
if (declarator)
if (unsigned candidate = declarator->lastToken())
return candidate;
diff --git a/src/libs/3rdparty/cplusplus/AST.h b/src/libs/3rdparty/cplusplus/AST.h
index 2f1aabf72ba..bcb691910c5 100644
--- a/src/libs/3rdparty/cplusplus/AST.h
+++ b/src/libs/3rdparty/cplusplus/AST.h
@@ -1921,7 +1921,6 @@ public:
SpecifierListAST *type_specifier_list;
DeclaratorAST *declarator;
// or an expression
- ExpressionAST *initializer;
unsigned colon_token;
ExpressionAST *expression;
unsigned rparen_token;
@@ -1936,7 +1935,6 @@ public:
, lparen_token(0)
, type_specifier_list(0)
, declarator(0)
- , initializer(0)
, colon_token(0)
, expression(0)
, rparen_token(0)
diff --git a/src/libs/3rdparty/cplusplus/ASTClone.cpp b/src/libs/3rdparty/cplusplus/ASTClone.cpp
index 8fc94476275..7605c049302 100644
--- a/src/libs/3rdparty/cplusplus/ASTClone.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTClone.cpp
@@ -681,8 +681,6 @@ RangeBasedForStatementAST *RangeBasedForStatementAST::clone(MemoryPool *pool) co
*ast_iter = new (pool) SpecifierListAST((iter->value) ? iter->value->clone(pool) : 0);
if (declarator)
ast->declarator = declarator->clone(pool);
- if (initializer)
- ast->initializer = initializer->clone(pool);
ast->colon_token = colon_token;
if (expression)
ast->expression = expression->clone(pool);
diff --git a/src/libs/3rdparty/cplusplus/ASTMatcher.cpp b/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
index 71e030ac3c8..8832cecc57c 100644
--- a/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTMatcher.cpp
@@ -1154,11 +1154,6 @@ bool ASTMatcher::match(RangeBasedForStatementAST *node, RangeBasedForStatementAS
else if (! AST::match(node->declarator, pattern->declarator, this))
return false;
- if (! pattern->initializer)
- pattern->initializer = node->initializer;
- else if (! AST::match(node->initializer, pattern->initializer, this))
- return false;
-
pattern->colon_token = node->colon_token;
if (! pattern->expression)
diff --git a/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h b/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
index 10116ac6bcf..4f69b6999a7 100644
--- a/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
+++ b/src/libs/3rdparty/cplusplus/ASTPatternBuilder.h
@@ -447,12 +447,11 @@ public:
return __ast;
}
- RangeBasedForStatementAST *RangeBasedForStatement(SpecifierListAST *type_specifier_list = 0, DeclaratorAST *declarator = 0, ExpressionAST *initializer = 0, ExpressionAST *expression = 0, StatementAST *statement = 0)
+ RangeBasedForStatementAST *RangeBasedForStatement(SpecifierListAST *type_specifier_list = 0, DeclaratorAST *declarator = 0, ExpressionAST *expression = 0, StatementAST *statement = 0)
{
RangeBasedForStatementAST *__ast = new (&pool) RangeBasedForStatementAST;
__ast->type_specifier_list = type_specifier_list;
__ast->declarator = declarator;
- __ast->initializer = initializer;
__ast->expression = expression;
__ast->statement = statement;
return __ast;
diff --git a/src/libs/3rdparty/cplusplus/ASTVisit.cpp b/src/libs/3rdparty/cplusplus/ASTVisit.cpp
index 7fe3e6eca5a..9a7f926cc89 100644
--- a/src/libs/3rdparty/cplusplus/ASTVisit.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTVisit.cpp
@@ -493,7 +493,6 @@ void RangeBasedForStatementAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) {
accept(type_specifier_list, visitor);
accept(declarator, visitor);
- accept(initializer, visitor);
accept(expression, visitor);
accept(statement, visitor);
}
diff --git a/src/libs/3rdparty/cplusplus/Bind.cpp b/src/libs/3rdparty/cplusplus/Bind.cpp
index 2ab9930332c..30745c14bd7 100644
--- a/src/libs/3rdparty/cplusplus/Bind.cpp
+++ b/src/libs/3rdparty/cplusplus/Bind.cpp
@@ -1332,7 +1332,6 @@ bool Bind::visit(RangeBasedForStatementAST *ast)
block->addMember(decl);
}
- /*ExpressionTy initializer =*/ this->expression(ast->initializer);
/*ExpressionTy expression =*/ this->expression(ast->expression);
this->statement(ast->statement);
(void) switchScope(previousScope);
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 04246b9cf06..b4bf8158e22 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -3429,7 +3429,11 @@ bool Parser::parseForStatement(StatementAST *&node)
ast->colon_token = consumeToken();
blockErrors(blocked);
- parseExpression(ast->expression);
+ if (LA() == T_LBRACE) {
+ parseBracedInitList0x(ast->expression);
+ } else {
+ parseExpression(ast->expression);
+ }
match(T_RPAREN, &ast->rparen_token);
parseStatement(ast->statement);
diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp
index 09e65e9436b..d9ca28a7056 100644
--- a/src/libs/cplusplus/FindUsages.cpp
+++ b/src/libs/cplusplus/FindUsages.cpp
@@ -1025,7 +1025,6 @@ bool FindUsages::visit(RangeBasedForStatementAST *ast)
this->specifier(it->value);
}
this->declarator(ast->declarator);
- this->expression(ast->initializer);
// unsigned comma_token = ast->comma_token;
this->expression(ast->expression);
// unsigned rparen_token = ast->rparen_token;
diff --git a/tests/auto/cplusplus/cxx11/data/rangeFor.1.cpp b/tests/auto/cplusplus/cxx11/data/rangeFor.1.cpp
new file mode 100644
index 00000000000..3a9a2e7d4f5
--- /dev/null
+++ b/tests/auto/cplusplus/cxx11/data/rangeFor.1.cpp
@@ -0,0 +1,5 @@
+int main() {
+ for (int x : {1, 2, 3}) {}
+ for (int x : foo) ;
+ for (int& x : array) x += 2;
+}
diff --git a/tests/auto/cplusplus/cxx11/tst_cxx11.cpp b/tests/auto/cplusplus/cxx11/tst_cxx11.cpp
index 684de7ae306..0d7a34a316d 100644
--- a/tests/auto/cplusplus/cxx11/tst_cxx11.cpp
+++ b/tests/auto/cplusplus/cxx11/tst_cxx11.cpp
@@ -141,6 +141,7 @@ void tst_cxx11::parse_data()
QTest::newRow("defaultdeleteInitializer.1") << "defaultdeleteInitializer.1.cpp" << "";
QTest::newRow("refQualifier.1") << "refQualifier.1.cpp" << "";
QTest::newRow("alignofAlignas.1") << "alignofAlignas.1.cpp" << "";
+ QTest::newRow("rangeFor.1") << "rangeFor.1.cpp" << "";
}
void tst_cxx11::parse()
diff --git a/tests/tools/cplusplus-dump/dumpers.inc b/tests/tools/cplusplus-dump/dumpers.inc
index 52717595151..bcb4ae335e6 100644
--- a/tests/tools/cplusplus-dump/dumpers.inc
+++ b/tests/tools/cplusplus-dump/dumpers.inc
@@ -662,7 +662,6 @@ virtual bool visit(RangeBasedForStatementAST *ast)
for (SpecifierListAST *iter = ast->type_specifier_list; iter; iter = iter->next)
nonterminal(iter->value);
nonterminal(ast->declarator);
- nonterminal(ast->initializer);
if (ast->colon_token)
terminal(ast->colon_token, ast);
nonterminal(ast->expression);