Fix #1071 ((style) The function 'throw' is never used)
http://sourceforge.net/apps/trac/cppcheck/ticket/1071
This commit is contained in:
parent
d08d1deab1
commit
87325799c5
|
@ -69,12 +69,19 @@ void CheckUnusedFunctions::parseTokens(const Tokenizer &tokenizer)
|
||||||
else if (Token::Match(tok, "%type% :: %var% (") && !Token::Match(tok, tok->strAt(2)))
|
else if (Token::Match(tok, "%type% :: %var% (") && !Token::Match(tok, tok->strAt(2)))
|
||||||
funcname = tok->tokAt(2);
|
funcname = tok->tokAt(2);
|
||||||
|
|
||||||
|
// Don't assume throw as a function name: void foo() throw () {}
|
||||||
|
if (Token::Match(tok->previous(), ")|const"))
|
||||||
|
funcname = 0;
|
||||||
|
|
||||||
// Check that ") {" is found..
|
// Check that ") {" is found..
|
||||||
for (const Token *tok2 = funcname; tok2; tok2 = tok2->next())
|
for (const Token *tok2 = funcname; tok2; tok2 = tok2->next())
|
||||||
{
|
{
|
||||||
if (tok2->str() == ")")
|
if (tok2->str() == ")")
|
||||||
{
|
{
|
||||||
if (! Token::simpleMatch(tok2, ") {") && ! Token::simpleMatch(tok2, ") const {"))
|
if (! Token::simpleMatch(tok2, ") {") &&
|
||||||
|
! Token::simpleMatch(tok2, ") const {") &&
|
||||||
|
! Token::simpleMatch(tok2, ") const throw ( ) {") &&
|
||||||
|
! Token::simpleMatch(tok2, ") throw ( ) {"))
|
||||||
funcname = NULL;
|
funcname = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,8 @@ private:
|
||||||
TEST_CASE(else1);
|
TEST_CASE(else1);
|
||||||
TEST_CASE(functionpointer);
|
TEST_CASE(functionpointer);
|
||||||
TEST_CASE(template1);
|
TEST_CASE(template1);
|
||||||
|
TEST_CASE(throwIsNotAFunction);
|
||||||
|
TEST_CASE(unusedError);
|
||||||
}
|
}
|
||||||
|
|
||||||
void check(const char code[])
|
void check(const char code[])
|
||||||
|
@ -143,6 +145,31 @@ private:
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void throwIsNotAFunction()
|
||||||
|
{
|
||||||
|
check("struct A {void f() const throw () {}}; int main() {A a; a.f();}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void unusedError()
|
||||||
|
{
|
||||||
|
check("void foo() {}\n"
|
||||||
|
"int main()\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:1]: (style) The function 'foo' is never used\n", errout.str());
|
||||||
|
|
||||||
|
check("void foo() const {}\n"
|
||||||
|
"int main()\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:1]: (style) The function 'foo' is never used\n", errout.str());
|
||||||
|
|
||||||
|
check("void foo() const throw() {}\n"
|
||||||
|
"int main()\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:1]: (style) The function 'foo' is never used\n", errout.str());
|
||||||
|
|
||||||
|
check("void foo() throw() {}\n"
|
||||||
|
"int main()\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:1]: (style) The function 'foo' is never used\n", errout.str());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST(TestUnusedFunctions)
|
REGISTER_TEST(TestUnusedFunctions)
|
||||||
|
|
Loading…
Reference in New Issue