Fixed #4540 (memory leak not detected ('.' or '->' is used before Function))
This commit is contained in:
parent
ec1c86c152
commit
bd7e3cbac5
|
@ -140,7 +140,7 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getAllocationType(const Token *tok2,
|
||||||
if (! tok2->isName())
|
if (! tok2->isName())
|
||||||
return No;
|
return No;
|
||||||
|
|
||||||
if (!Token::Match(tok2, "%type% :: %type%")) {
|
if (!Token::Match(tok2, "%type%|%var% ::|. %type%")) {
|
||||||
// Does tok2 point on "malloc", "strdup" or "kmalloc"..
|
// Does tok2 point on "malloc", "strdup" or "kmalloc"..
|
||||||
static const char * const mallocfunc[] = {
|
static const char * const mallocfunc[] = {
|
||||||
"malloc",
|
"malloc",
|
||||||
|
@ -215,7 +215,7 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getAllocationType(const Token *tok2,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (Token::Match(tok2,"%type% :: %type%"))
|
while (Token::Match(tok2,"%type%|%var% ::|. %type%"))
|
||||||
tok2 = tok2->tokAt(2);
|
tok2 = tok2->tokAt(2);
|
||||||
|
|
||||||
// User function
|
// User function
|
||||||
|
|
|
@ -241,7 +241,7 @@ private:
|
||||||
TEST_CASE(allocfunc10);
|
TEST_CASE(allocfunc10);
|
||||||
TEST_CASE(allocfunc11);
|
TEST_CASE(allocfunc11);
|
||||||
TEST_CASE(allocfunc12); // #3660: allocating and returning non-local pointer => not allocfunc
|
TEST_CASE(allocfunc12); // #3660: allocating and returning non-local pointer => not allocfunc
|
||||||
TEST_CASE(allocfunc13); // Ticket #4494 - class function
|
TEST_CASE(allocfunc13); // Ticket #4494 and #4540 - class function
|
||||||
|
|
||||||
TEST_CASE(throw1);
|
TEST_CASE(throw1);
|
||||||
TEST_CASE(throw2);
|
TEST_CASE(throw2);
|
||||||
|
@ -2594,6 +2594,15 @@ private:
|
||||||
" char *x = n::a();\n"
|
" char *x = n::a();\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:6]: (error) Memory leak: x\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:6]: (error) Memory leak: x\n", errout.str());
|
||||||
|
|
||||||
|
check("class C {\n" // ¤4540
|
||||||
|
" char *a() { return malloc(100); }\n"
|
||||||
|
"}\n"
|
||||||
|
"void b() {\n"
|
||||||
|
" C c;"
|
||||||
|
" char *x = c.a();\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("[test.cpp:6]: (error) Memory leak: x\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void throw1() {
|
void throw1() {
|
||||||
|
|
Loading…
Reference in New Issue