memleak: *x=malloc(); func(&x) is no longer reported as a leak (eliminated &use2).
This commit is contained in:
parent
835a749026
commit
04faae2882
|
@ -652,14 +652,10 @@ Token *CheckMemoryLeakClass::getcode(const Token *tok, std::list<const Token *>
|
|||
}
|
||||
|
||||
// Linux lists..
|
||||
if (Token::Match(tok, std::string("[=(,] & " + varnameStr + " [.[]").c_str()))
|
||||
if (Token::Match(tok, std::string("[=(,] & " + varnameStr + " [.[,)]").c_str()))
|
||||
{
|
||||
addtoken("&use");
|
||||
}
|
||||
else if (Token::Match(tok, std::string("[=(,] & " + varnameStr + " [,)]").c_str()))
|
||||
{
|
||||
addtoken("&use2");
|
||||
}
|
||||
}
|
||||
|
||||
return rethead;
|
||||
|
@ -1155,12 +1151,12 @@ void CheckMemoryLeakClass::CheckMemoryLeak_CheckScope(const Token *Tok1, const c
|
|||
_errorLogger->reportErr(errmsg.str());
|
||||
}
|
||||
|
||||
// Replace "&use" with "use". Replace "&use2" with ";"
|
||||
// Replace "&use" with "use". Replace "use_" with ";"
|
||||
for (Token *tok2 = tok; tok2; tok2 = tok2->next())
|
||||
{
|
||||
if (tok2->str() == "&use")
|
||||
tok2->str("use");
|
||||
else if (tok2->str() == "&use2" || tok2->str() == "use_")
|
||||
else if (tok2->str() == "use_")
|
||||
tok2->str(";");
|
||||
else if (tok2->str() == "recursive")
|
||||
tok2->str("use");
|
||||
|
|
|
@ -132,6 +132,7 @@ private:
|
|||
TEST_CASE(func10); // Bug 2458510 - Function pointer
|
||||
TEST_CASE(func11); // Bug 2458510 - Function pointer
|
||||
TEST_CASE(func12);
|
||||
TEST_CASE(func13);
|
||||
|
||||
TEST_CASE(class1);
|
||||
TEST_CASE(class2);
|
||||
|
@ -1131,6 +1132,18 @@ private:
|
|||
ASSERT_EQUALS(std::string(""), errout.str());
|
||||
}
|
||||
|
||||
void func13()
|
||||
{
|
||||
check("static void f()\n"
|
||||
"{\n"
|
||||
" char *p = malloc(100);\n"
|
||||
" foo(&p);\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS(std::string(""), errout.str());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
void func3()
|
||||
|
|
Loading…
Reference in New Issue