From 7b3e7f6467d77f816280ae846e818ccd7a331abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 15 Nov 2010 17:30:07 +0100 Subject: [PATCH] Fixed #2205 (False positive: variable is assigned a value that is never used (assigning to dereferenced casted pointers)) --- lib/checkother.cpp | 8 ++++++-- test/testunusedvar.cpp | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/checkother.cpp b/lib/checkother.cpp index d15c6cb8e..9b47fc046 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -1543,7 +1543,8 @@ void CheckOther::functionVariableUsage() variables.readAll(tok->next()->varId()); // assignment - else if (Token::Match(tok, "*| (| ++|--| %var% ++|--| )| =")) + else if (Token::Match(tok, "*| (| ++|--| %var% ++|--| )| =") || + Token::Match(tok, "*| ( const| %type% *| ) %var% =")) { bool dereference = false; bool pre = false; @@ -1555,7 +1556,10 @@ void CheckOther::functionVariableUsage() tok = tok->next(); } - if (tok->str() == "(") + if (Token::Match(tok, "( const| %type% *| ) %var% =")) + tok = tok->link()->next(); + + else if (tok->str() == "(") tok = tok->next(); if (Token::Match(tok, "++|--")) diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index a47ea5ac3..a98a8994d 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -74,6 +74,7 @@ private: TEST_CASE(localvar25); // ticket #1729 TEST_CASE(localvar26); // ticket #1894 TEST_CASE(localvar27); // ticket #2160 + TEST_CASE(localvar28); // ticket #2205 TEST_CASE(localvaralias1); TEST_CASE(localvaralias2); // ticket #1637 TEST_CASE(localvaralias3); // ticket #1639 @@ -1282,6 +1283,16 @@ private: ASSERT_EQUALS("", errout.str()); } + void localvar28() // ticket #2205 + { + functionVariableUsage("void f(char* buffer, int value) {\n" + " char* pos = buffer;\n" + " int size = value;\n" + " *(int*)pos = size;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + void localvaralias1() { functionVariableUsage("void foo()\n"