memory leak: detect memory leak (#6)
This commit is contained in:
parent
afe19dd0a2
commit
f562f588fb
|
@ -972,6 +972,13 @@ void CheckMemoryLeakClass::simplifycode(Token *tok)
|
||||||
done = false;
|
done = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace "loop if return ;" with "if return ;"
|
||||||
|
if (Token::Match(tok2->next(), "loop if return"))
|
||||||
|
{
|
||||||
|
erase(tok2, tok2->tokAt(2));
|
||||||
|
done = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Delete if block in "alloc ; if(!var) return ;"
|
// Delete if block in "alloc ; if(!var) return ;"
|
||||||
if (Token::Match(tok2, "alloc ; if(!var) return ;"))
|
if (Token::Match(tok2, "alloc ; if(!var) return ;"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,6 +109,7 @@ private:
|
||||||
|
|
||||||
TEST_CASE(switch1);
|
TEST_CASE(switch1);
|
||||||
TEST_CASE(switch2);
|
TEST_CASE(switch2);
|
||||||
|
TEST_CASE(switch3);
|
||||||
|
|
||||||
TEST_CASE(ret1);
|
TEST_CASE(ret1);
|
||||||
TEST_CASE(ret2);
|
TEST_CASE(ret2);
|
||||||
|
@ -835,7 +836,6 @@ private:
|
||||||
ASSERT_EQUALS(std::string(""), errout.str());
|
ASSERT_EQUALS(std::string(""), errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void switch2()
|
void switch2()
|
||||||
{
|
{
|
||||||
const std::string code("void f()\n"
|
const std::string code("void f()\n"
|
||||||
|
@ -856,6 +856,23 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:12]: Memory leak: str\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:12]: Memory leak: str\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void switch3()
|
||||||
|
{
|
||||||
|
check("void f()\n"
|
||||||
|
"{\n"
|
||||||
|
" char *str = new char[10];\n"
|
||||||
|
" while (abc)\n"
|
||||||
|
" {\n"
|
||||||
|
" switch (def)\n"
|
||||||
|
" {\n"
|
||||||
|
" default:\n"
|
||||||
|
" return;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
" delete [] str;\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("[test.cpp:9]: Memory leak: str\n", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue