diff --git a/lib/checkother.cpp b/lib/checkother.cpp index 801eaa513..627f9b939 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -2278,7 +2278,11 @@ void CheckOther::functionVariableUsage() for (const Token *tok2 = tok->next(); tok2 && tok2->str() != ";"; tok2 = tok2->next()) { if (tok2->varId()) + { variables.read(tok2->varId()); + if (tok2->next()->isAssignmentOp()) + variables.write(tok2->varId()); + } } } } diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 3ddb229a0..dd49cec5e 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -83,6 +83,7 @@ private: TEST_CASE(localvar33); // ticket #2346 TEST_CASE(localvar34); // ticket #2368 TEST_CASE(localvar35); // ticket #2535 + TEST_CASE(localvar36); // ticket #2805 TEST_CASE(localvaralias1); TEST_CASE(localvaralias2); // ticket #1637 TEST_CASE(localvaralias3); // ticket #1639 @@ -1383,6 +1384,16 @@ private: ASSERT_EQUALS("", errout.str()); } + void localvar36() // ticket #2805 + { + functionVariableUsage("int f() {\n" + " int a, b;\n" + " a = 2 * (b = 3);\n" + " return a + b;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + void localvaralias1() { functionVariableUsage("void foo()\n"