diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 0feaf01e8..d059a9ad7 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -804,6 +804,8 @@ static void compilePrecedence2(Token *&tok, AST_state& state) if (curlyBracket && curlyBracket->originalName() == "->") { while (Token::Match(curlyBracket, "%name%|.|::|&|*")) curlyBracket = curlyBracket->next(); + if (curlyBracket && curlyBracket->str() == "<" && curlyBracket->link()) + curlyBracket = curlyBracket->link()->next(); } if (curlyBracket && curlyBracket->str() == "{") { squareBracket->astOperand1(roundBracket); diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 66d90d801..83e15bfc2 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -7620,6 +7620,12 @@ private: " a=b;\n" " }\n" "}")); + + // daca@home hang + ASSERT_EQUALS("a{([= 0return b{([= fori0=i10!=i++;;(", + testAst("a = [&]() -> std::pair { return 0; };\n" + "b = [=]() { for (i = 0; i != 10; ++i); };")); + } void astcase() {