This commit is contained in:
parent
479af21405
commit
3630e9c49d
|
@ -814,7 +814,7 @@ static void compileTerm(Token *&tok, AST_state& state)
|
||||||
state.op.push(tok);
|
state.op.push(tok);
|
||||||
if (Token::Match(tok, "%name% <") && tok->linkAt(1))
|
if (Token::Match(tok, "%name% <") && tok->linkAt(1))
|
||||||
tok = tok->linkAt(1);
|
tok = tok->linkAt(1);
|
||||||
else if (Token::Match(tok, "%name% ..."))
|
else if (Token::Match(tok, "%name% ...") || (state.op.size() == 1 && Token::Match(tok->previous(), "( %name% ) =")))
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
if (Token::Match(tok, "%str%")) {
|
if (Token::Match(tok, "%str%")) {
|
||||||
|
@ -1467,7 +1467,7 @@ static Token * createAstAtToken(Token *tok, bool cpp)
|
||||||
while (tok2 && tok2 != endPar && tok2->str() != ";") {
|
while (tok2 && tok2 != endPar && tok2->str() != ";") {
|
||||||
if (tok2->str() == "<" && tok2->link()) {
|
if (tok2->str() == "<" && tok2->link()) {
|
||||||
tok2 = tok2->link();
|
tok2 = tok2->link();
|
||||||
} else if (Token::Match(tok2, "%name% %op%|(|[|.|:|::") || Token::Match(tok2->previous(), "[(;{}] %cop%|(")) {
|
} else if (Token::Match(tok2, "%name% )| %op%|(|[|.|:|::") || Token::Match(tok2->previous(), "[(;{}] %cop%|(")) {
|
||||||
init1 = tok2;
|
init1 = tok2;
|
||||||
AST_state state1(cpp);
|
AST_state state1(cpp);
|
||||||
compileExpression(tok2, state1);
|
compileExpression(tok2, state1);
|
||||||
|
|
|
@ -504,6 +504,14 @@ private:
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("struct T {\n" // #10874
|
||||||
|
" T* p;\n"
|
||||||
|
"};\n"
|
||||||
|
"void f(T* t) {\n"
|
||||||
|
" for (decltype(t->p) (c) = t->p; ;) {}\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("void f(int i, std::vector<int*> v);\n" // #10880
|
check("void f(int i, std::vector<int*> v);\n" // #10880
|
||||||
"void g() {\n"
|
"void g() {\n"
|
||||||
" f(1, { static_cast<int*>(nullptr) });\n"
|
" f(1, { static_cast<int*>(nullptr) });\n"
|
||||||
|
|
|
@ -6213,6 +6213,12 @@ private:
|
||||||
ASSERT_EQUALS("decltypex( var1=", testAst("decltype(x) var = 1;"));
|
ASSERT_EQUALS("decltypex( var1=", testAst("decltype(x) var = 1;"));
|
||||||
ASSERT_EQUALS("a1bdecltypet((>2,(", testAst("a(1 > b(decltype(t)), 2);")); // #10271
|
ASSERT_EQUALS("a1bdecltypet((>2,(", testAst("a(1 > b(decltype(t)), 2);")); // #10271
|
||||||
ASSERT_EQUALS("decltypex({01:?", testAst("decltype(x){} ? 0 : 1;"));
|
ASSERT_EQUALS("decltypex({01:?", testAst("decltype(x){} ? 0 : 1;"));
|
||||||
|
|
||||||
|
ASSERT_EQUALS("Tp* Tt* forctp.=;;( tp.", testAst("struct T { T* p; };\n" // #10874
|
||||||
|
"void f(T * t) {\n"
|
||||||
|
" for (decltype(t->p) (c) = t->p; ;) {}\n"
|
||||||
|
"}\n"));
|
||||||
|
ASSERT_EQUALS("x0=a, stdtie::a(x=", testAst("int x = 0, a; std::tie(a) = x;\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void astunaryop() { // unary operators
|
void astunaryop() { // unary operators
|
||||||
|
|
Loading…
Reference in New Issue