testmemleak: improved the checking of loops
This commit is contained in:
parent
7752f2c62c
commit
0f036f622b
|
@ -249,6 +249,7 @@ static TOKEN *getcode(const TOKEN *tok, const char varname[])
|
|||
Match(tok, "if ( %var1% != NULL )", varnames) )
|
||||
{
|
||||
addtoken("if(var)");
|
||||
tok = gettok(tok, 3); // Make sure the "use" will not be added
|
||||
}
|
||||
else if ( Match(tok, "if ( ! %var1% )", varnames) ||
|
||||
Match(tok, "if ( unlikely ( ! %var1% ) )", varnames) ||
|
||||
|
@ -518,7 +519,12 @@ static void CheckMemoryLeak_CheckScope( const TOKEN *Tok1, const char varname[]
|
|||
}
|
||||
|
||||
|
||||
if ( findmatch(tok, "alloc ; if continue ;") )
|
||||
if ( findmatch(tok, "loop alloc ;") )
|
||||
{
|
||||
MemoryLeak(findmatch(tok, "loop alloc ;"), varname);
|
||||
}
|
||||
|
||||
else if ( findmatch(tok, "alloc ; if continue ;") )
|
||||
{
|
||||
MemoryLeak(gettok(findmatch(tok, "alloc ; if continue ;"), 3), varname);
|
||||
}
|
||||
|
|
|
@ -46,7 +46,8 @@ public:
|
|||
|
||||
TEST_CASE( forwhile1 );
|
||||
TEST_CASE( forwhile2 );
|
||||
|
||||
TEST_CASE( forwhile3 );
|
||||
TEST_CASE( forwhile4 );
|
||||
|
||||
TEST_CASE( switch1 );
|
||||
TEST_CASE( switch2 );
|
||||
|
@ -298,8 +299,36 @@ public:
|
|||
}
|
||||
|
||||
|
||||
void forwhile3()
|
||||
{
|
||||
check( "void f()\n"
|
||||
"{\n"
|
||||
" char *str = 0;\n"
|
||||
" for (int i = 0; i < 10; i++)\n"
|
||||
" {\n"
|
||||
" str = strdup(\"hello\");\n"
|
||||
" }\n"
|
||||
" free(str);\n"
|
||||
"}\n" );
|
||||
ASSERT_EQUALS( std::string("[test.cpp:4]: Memory leak: str\n"), errout.str() );
|
||||
}
|
||||
|
||||
|
||||
void forwhile4()
|
||||
{
|
||||
check( "void f()\n"
|
||||
"{\n"
|
||||
" char *str = 0;\n"
|
||||
" for (int i = 0; i < 10; i++)\n"
|
||||
" {\n"
|
||||
" str = strdup(\"hello\");\n"
|
||||
" if (str) { }\n"
|
||||
" }\n"
|
||||
" free(str);\n"
|
||||
"}\n" );
|
||||
ASSERT_EQUALS( std::string("[test.cpp:4]: Memory leak: str\n"), errout.str() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue