From 6c4e8761c8f6b09f0c547cb0c3abe2cb3d1725d6 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Wed, 26 Mar 2014 12:34:21 +0100 Subject: [PATCH] Fixed false positive "unused function" #5113. --- lib/checkunusedfunctions.cpp | 4 ++-- test/testunusedfunctions.cpp | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/checkunusedfunctions.cpp b/lib/checkunusedfunctions.cpp index 906ec15d1..50d9f4843 100644 --- a/lib/checkunusedfunctions.cpp +++ b/lib/checkunusedfunctions.cpp @@ -178,13 +178,13 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer, const char Fi funcname = funcname->next(); } - else if (Token::Match(tok, "[=(,] &| %var% :: %var%")) { + 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% [,);]")) + if (!Token::Match(funcname, "%var% [(),;:}]")) continue; } diff --git a/test/testunusedfunctions.cpp b/test/testunusedfunctions.cpp index 80a04a630..0b969e81e 100644 --- a/test/testunusedfunctions.cpp +++ b/test/testunusedfunctions.cpp @@ -50,6 +50,7 @@ private: TEST_CASE(returnRef); TEST_CASE(attribute); // #3471 - FP __attribute__(constructor) TEST_CASE(initializer_list); + TEST_CASE(member_function_ternary); TEST_CASE(multipleFiles); // same function name in multiple files @@ -295,6 +296,20 @@ private: ASSERT_EQUALS("", errout.str()); } + void member_function_ternary() { + check("struct Foo {\n" + " void F1() {}\n" + " void F2() {}\n" + "};\n" + "int main(int argc, char *argv[]) {\n" + " Foo foo;\n" + " void (Foo::*ptr)();\n" + " ptr = (argc > 1 && !strcmp(argv[1], \"F2\")) ? &Foo::F2 : &Foo::F1;\n" + " (foo.*ptr)();\n" + "}"); + ASSERT_EQUALS("", errout.str()); + } + void multipleFiles() { CheckUnusedFunctions c;