From 2bba9ac78a248e1a2d46376b57e4beaa12d8bf93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 26 Jan 2019 21:43:44 +0100 Subject: [PATCH] Fixed #8948 (False Positive: Variable 'n' is assigned a value that is never used.) --- lib/checkunusedvar.cpp | 2 +- test/testunusedvar.cpp | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 621ea5682..1d1b3c2db 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1102,7 +1102,7 @@ void CheckUnusedVar::checkFunctionVariableUsage() continue; for (const Token *tok = scope->bodyStart; tok != scope->bodyEnd; tok = tok->next()) { - if (Token::simpleMatch(tok, "] (")) + if (findLambdaEndToken(tok)) // todo: handle lambdas break; if (Token::simpleMatch(tok, "try {")) diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 25cd44aa3..a29fef6b4 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -181,7 +181,7 @@ private: TEST_CASE(localvarFuncPtr); // #7194 TEST_CASE(localvarAddr); // #7477 TEST_CASE(localvarDelete); - TEST_CASE(localvarLambda); // #8941 + TEST_CASE(localvarLambda); // #8941, #8948 TEST_CASE(localvarCppInitialization); TEST_CASE(localvarCpp11Initialization); @@ -4246,6 +4246,16 @@ private: " return f() + g();\n" "}"); ASSERT_EQUALS("", errout.str()); + + functionVariableUsage("void foo(std::vector& v) {\n" + " int n = 0;\n" + " std::generate(v.begin(), v.end(), [&n] {\n" + " int r = n;\n" + " n += 2;\n" + " return r;\n" + " });\n" + "}"); + ASSERT_EQUALS("", errout.str()); } void localvarCppInitialization() {