From 8240422a096c7f5ab285d36ec7051a31116df54c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 4 Sep 2011 20:48:05 +0200 Subject: [PATCH] Fixed #3078 (vector::at using int causes false positive) --- lib/checkunusedvar.cpp | 5 +++-- test/testunusedvar.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 2e5c3e430..72102e612 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1144,8 +1144,9 @@ void CheckUnusedVar::checkFunctionVariableUsage() variables.readAll(tok->next()->varId()); // assignment - else if (Token::Match(tok, "*| (| ++|--| %var% ++|--| )| =") || - Token::Match(tok, "*| ( const| %type% *| ) %var% =")) + else if (!Token::Match(tok->tokAt(-2), "[;{}.] %var% (") && + (Token::Match(tok, "*| (| ++|--| %var% ++|--| )| =") || + Token::Match(tok, "*| ( const| %type% *| ) %var% ="))) { bool dereference = false; bool pre = false; diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index d0811621b..5e84990ca 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -84,6 +84,7 @@ private: TEST_CASE(localvar34); // ticket #2368 TEST_CASE(localvar35); // ticket #2535 TEST_CASE(localvar36); // ticket #2805 + TEST_CASE(localvar37); // ticket #3078 TEST_CASE(localvaralias1); TEST_CASE(localvaralias2); // ticket #1637 TEST_CASE(localvaralias3); // ticket #1639 @@ -1400,6 +1401,15 @@ private: ASSERT_EQUALS("", errout.str()); } + void localvar37() // ticket #3078 + { + functionVariableUsage("void f() {\n" + " int a = 2;\n" + " ints.at(a) = 0;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + } + void localvaralias1() { functionVariableUsage("void foo()\n"