From f96714243660e9da4b15e64a87f94018a87ac9d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 14 Jun 2012 22:04:21 +0200 Subject: [PATCH] Fixed #3875 (Static member method called with class name is considered unused) --- lib/checkunusedfunctions.cpp | 11 +++++++++-- test/testunusedfunctions.cpp | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/checkunusedfunctions.cpp b/lib/checkunusedfunctions.cpp index eba54057a..161ee9317 100644 --- a/lib/checkunusedfunctions.cpp +++ b/lib/checkunusedfunctions.cpp @@ -107,8 +107,15 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer) else if (Token::Match(tok, "[;{}.,()[=+-/&|!?:] %var% [(),;:}]")) funcname = tok->next(); - else if (Token::Match(tok, "[=(,] & %var% :: %var% [,);]")) - funcname = tok->tokAt(4); + else if (Token::Match(tok, "[=(,] &| %var% :: %var%")) { + funcname = tok->next(); + if (funcname->str() == "&") + funcname = funcname->next(); + while (Token::Match(funcname,"%var% :: %var%")) + funcname = funcname->tokAt(2); + if (!Token::Match(funcname, "%var% [,);]")) + continue; + } else continue; diff --git a/test/testunusedfunctions.cpp b/test/testunusedfunctions.cpp index fc367689c..1ce54d1e5 100644 --- a/test/testunusedfunctions.cpp +++ b/test/testunusedfunctions.cpp @@ -135,6 +135,17 @@ private: " return 0\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + check("namespace abc {\n" // #3875 + "void foo() { }\n" + "};\n" + "\n" + "int main()\n" + "{\n" + " f(abc::foo);\n" + " return 0\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void template1() {