diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 26368064c63..2add1e6eebc 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1009,7 +1009,7 @@ void CheckUnusedVarImpl::checkFunctionVariableUsage_iterateScopes(const Scope* c const Token * const equal = skipBracketsAndMembers(tok->next()); // checked for chained assignments - if (tok != start && equal && equal->str() == "=") { + if (tok != start && (Token::simpleMatch(equal, "=") || (start->astParent() && Token::simpleMatch(start->astParent()->astParent(), "=")))) { const nonneg int varId = tok->varId(); const Variables::VariableUsage * const var = variables.find(varId); diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index f25d544c906..78ecd45ccef 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -3370,6 +3370,14 @@ class TestUnusedVar : public TestFixture { " return a;\n" "}\n"); ASSERT_EQUALS("[test.cpp:5:14]: (style) Variable 'b[c]' is assigned a value that is never used. [unreadVariable]\n", errout_str()); + + functionVariableUsage("int f() {\n" // #14769 + " int i = 2;\n" + " const int *a, *c;\n" + " a = c = &i;\n" + " return *a;\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:4:11]: (style) Variable 'c' is assigned a value that is never used. [unreadVariable]\n", errout_str()); } void localvar24() { // ticket #1803