From f9d33c07f85f7e4c2e445d27cb268b62564ce57c Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Fri, 29 Nov 2019 02:45:02 -0600 Subject: [PATCH] Fix issue 9458: Crash with shadow variables in a lambda (#2406) * Fix issue 9458: Crash with shadow variables in a lambda * Format --- lib/valueflow.cpp | 6 +++--- test/testvalueflow.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 22e99ad5c..9ab440f84 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1665,9 +1665,9 @@ static void valueFlowReverse(TokenList *tokenlist, const Token * const startToken = var->nameToken(); for (Token *tok2 = tok->previous(); ; tok2 = tok2->previous()) { - if (!tok2 || - tok2 == startToken || - (tok2->str() == "{" && tok2->scope()->type == Scope::ScopeType::eFunction)) { + if (!tok2 || tok2 == startToken || + (tok2->str() == "{" && + (tok2->scope()->type == Scope::ScopeType::eFunction || tok2->scope()->type == Scope::ScopeType::eLambda))) { break; } diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index d0de223a2..fb36816a7 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -4334,6 +4334,14 @@ private: " state = x;\n" "}\n"; valueOfTok(code, "="); + + code = "void a() {\n" + " auto b = [b = 0] {\n" + " if (b) {\n" + " }\n" + " };\n" + "}\n"; + valueOfTok(code, "0"); } };