From 7975ffba21202c6ee53f14c416b2de64d0393d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 25 Aug 2012 13:07:33 +0200 Subject: [PATCH] Fixed #3980 (Variable not assigned a value) --- lib/checkunusedvar.cpp | 9 ++++++++- test/testunusedvar.cpp | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 8eb43ee94..0aa02c377 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -836,7 +836,14 @@ void CheckUnusedVar::checkFunctionVariableUsage_iterateScopes(const Scope* const } // assignment - else if (Token::Match(tok, "%var% [") && Token::simpleMatch(skipBracketsAndMembers(tok->next()), "=")) { + else if ((Token::Match(tok, "%var% [") && Token::simpleMatch(skipBracketsAndMembers(tok->next()), "=")) || + (Token::simpleMatch(tok, "* (") && Token::simpleMatch(tok->next()->link(), ") ="))) { + if (tok->str() == "*") { + tok = tok->tokAt(2); + if (tok->str() == "(") + tok = tok->link()->next(); + } + unsigned int varid = tok->varId(); const Variables::VariableUsage *var = variables.find(varid); diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 82408043e..668338fc9 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -109,6 +109,7 @@ private: TEST_CASE(localvardynamic3); // ticket #3467 TEST_CASE(localvararray1); // ticket #2780 TEST_CASE(localvararray2); // ticket #3438 + TEST_CASE(localvararray3); // ticket #3980 TEST_CASE(localvarstring1); TEST_CASE(localvarstring2); // ticket #2929 TEST_CASE(localvarconst1); @@ -3090,6 +3091,15 @@ private: ASSERT_EQUALS("", errout.str()); } + void localvararray3() { + functionVariableUsage("int foo() {\n" + " int p[5][5];\n" + " *((int*)p[0]) = 0;\n" + " return p[0][0];\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + void localvarstring1() { // ticket #1597 functionVariableUsage("void foo() {\n" " std::string s;\n"