From 40e1e82a65a3e3a541ea4640329866ae0a92e614 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Sat, 4 Apr 2020 03:55:31 -0500 Subject: [PATCH] Fix issue 9644: Token::astOperand1() cyclic dependency on valid C++ code (#2590) * Remove check for lambda * Add test case --- lib/tokenlist.cpp | 15 --------------- test/testtokenize.cpp | 7 +++++++ 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 6438729c5..ef86c5750 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -1309,21 +1309,6 @@ static void createAstAtTokenInner(Token * const tok1, const Token *endToken, boo const Token * const endToken2 = tok->link(); for (; tok && tok != endToken && tok != endToken2; tok = tok ? tok->next() : nullptr) tok = createAstAtToken(tok, cpp); - } else if (const Token * lambdaEnd = findLambdaEndScope(tok)) { - Token *bodyStart = lambdaEnd->link(); - if (Token::Match(bodyStart, ". %name%") && bodyStart->originalName() == "->") { - bodyStart = bodyStart->next(); - while (Token::Match(bodyStart, "%name%|::")) - bodyStart = bodyStart->next(); - if (Token::simpleMatch(bodyStart, "<") && Token::simpleMatch(bodyStart->link(), "> {")) - bodyStart = bodyStart->link()->next(); - } - if (Token::simpleMatch(bodyStart, "{")) { - tok = bodyStart; - const Token * const endToken2 = tok->link(); - for (; tok && tok != endToken && tok != endToken2; tok = tok ? tok->next() : nullptr) - tok = createAstAtToken(tok, cpp); - } } } } diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index 8e9862c26..910e2aa5c 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -8244,6 +8244,13 @@ private: "void e(\n" " int, a f = [] {});\n")) + // #9644 + ASSERT_NO_THROW(tokenizeAndStringify("void a() {\n" + " char b[]{};\n" + " auto c = [](int d) {\n" + " for (char e = 0; d;) {}\n" + " };\n" + "}\n")) // #9537 ASSERT_NO_THROW(tokenizeAndStringify("struct a {\n" " template a(b) {}\n"