diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 69c597adf..9861566c5 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -453,6 +453,8 @@ static void compileTerm(Token *& tok, std::stack &op) while (Token::Match(tok, "(|[")) { Token *tok1 = tok; tok = tok->next(); + while (Token::Match(tok,"%var% %var%")) // example: sizeof(struct S) + tok = tok->next(); compileExpression(tok, op); if (!op.empty()) { tok1->astOperand2(op.top()); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index e5e16e2c1..6785ca8cb 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -10100,6 +10100,8 @@ private: ASSERT_EQUALS("a0>bc/?d:", testAst("(a>0) ? (b/(c)) : d;")); ASSERT_EQUALS("abc/+d+", testAst("a + (b/(c)) + d;")); + ASSERT_EQUALS("absizeofd(ef.+(=", testAst("a = b(sizeof(c d) + e.f)")); + // for ASSERT_EQUALS("for;;(", testAst("for(;;)")); ASSERT_EQUALS("fora0=a8