From 58f0f0344941b55ed3b2a7d4c5bc882578ea3a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 11 Nov 2008 20:19:28 +0000 Subject: [PATCH] Unused private function: return pointer to private function --- CheckClass.cpp | 2 ++ testunusedprivfunc.cpp | 40 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/CheckClass.cpp b/CheckClass.cpp index e3d61dd52..74af04958 100644 --- a/CheckClass.cpp +++ b/CheckClass.cpp @@ -511,6 +511,8 @@ void CheckClass::CheckUnusedPrivateFunctions() const char *_pattern[] = {"=","",NULL}; _pattern[1] = FuncList.front().c_str(); fp |= (Tokenizer::findtoken(tokens, _pattern) != NULL); + _pattern[0] = "return"; + fp |= (Tokenizer::findtoken(tokens, _pattern) != NULL); _pattern[0] = "("; fp |= (Tokenizer::findtoken(tokens, _pattern) != NULL); _pattern[0] = ")"; diff --git a/testunusedprivfunc.cpp b/testunusedprivfunc.cpp index 8fba611d4..787308b07 100644 --- a/testunusedprivfunc.cpp +++ b/testunusedprivfunc.cpp @@ -36,6 +36,9 @@ private: void run() { TEST_CASE( test1 ); + + // [ 2236547 ] False positive --style unused function, called via pointer + TEST_CASE( func_pointer ); } @@ -69,7 +72,7 @@ private: " Fred();\n" "};\n" "\n" - "unsigned int Fred::Fred()\n" + "Fred::Fred()\n" "{ }\n" "\n" "unsigned int Fred::f()\n" @@ -77,6 +80,41 @@ private: ASSERT_EQUALS( std::string("Class 'Fred', unused private function: 'f'\n"), errout.str() ); } + + + + + + + void func_pointer() + { + check( "class Fred\n" + "{\n" + "private:\n" + " typedef void (*testfp)();\n" + "\n" + " testfp get()\n" + " {\n" + " return test;\n" + " }\n" + "\n" + " static void test()\n" + " { }\n" + "\n" + "public:\n" + " Fred();\n" + "};\n" + "\n" + "Fred::Fred()\n" + "{}\n" ); + + std::string str( errout.str() ); + + ASSERT_EQUALS( std::string("Class 'Fred', unused private function: 'get'\n"), str ); + } + + + }; REGISTER_TEST( TestUnusedPrivateFunction )