memleak: class function usage (fixing #63)

This commit is contained in:
Daniel Marjamäki 2009-01-26 18:15:44 +00:00
parent ca0f007ca4
commit 068b1458c2
2 changed files with 24 additions and 2 deletions

View File

@ -609,7 +609,8 @@ Token *CheckMemoryLeakClass::getcode(const Token *tok, std::list<const Token *>
if (Token::Match(tok, "%var% ("))
{
// Inside class function.. if the var is passed as a parameter then
// just add a "use"
// just add a "::use"
// The "::use" means that a member function was probably called but it wasn't analyzed further
if (classmember)
{
int parlevel = 1;
@ -625,7 +626,7 @@ Token *CheckMemoryLeakClass::getcode(const Token *tok, std::list<const Token *>
}
if (tok2->str() == varnameStr)
{
addtoken("use");
addtoken("::use");
break;
}
}
@ -1172,6 +1173,8 @@ void CheckMemoryLeakClass::CheckMemoryLeak_CheckScope(const Token *Tok1, const c
tok2->str("use");
else if (tok2->str() == "use_")
tok2->str(";");
else if (tok2->str() == "::use") // Some kind of member function usage. Not analyzed very well.
tok2->str("use");
else if (tok2->str() == "recursive")
tok2->str("use");
else if (tok2->str() == "dealloc_")

View File

@ -141,6 +141,7 @@ private:
TEST_CASE(class5);
TEST_CASE(class6);
TEST_CASE(class7);
TEST_CASE(class8);
TEST_CASE(throw1);
TEST_CASE(throw2);
@ -1348,6 +1349,24 @@ private:
ASSERT_EQUALS("", errout.str());
}
void class8()
{
check("class A\n"
"{\n"
"public:\n"
" void a();\n"
" void doNothing() { }\n"
"};\n"
"\n"
"void A::a()\n"
"{\n"
" int* c = new int(1);\n"
" delete c;\n"
" doNothing(c);\n"
"}\n");
ASSERT_EQUALS("", errout.str());
}