Memory leaks: Added tests and handling for 'throw' and linux lists

This commit is contained in:
Daniel Marjamäki 2008-11-10 18:51:44 +00:00
parent 61db3a7f11
commit f4712ef5bf
2 changed files with 73 additions and 3 deletions

View File

@ -1,4 +1,4 @@
/*
/*
* c++check - c/c++ syntax checking
* Copyright (C) 2007 Daniel Marjamäki
*
@ -420,7 +420,11 @@ static TOKEN *getcode(const TOKEN *tok, const char varname[])
// goto..
if ( Match(tok, "goto") )
addtoken( "goto" );
{
// Todo: Add handling of goto..
deleteTokens(rethead);
return NULL;
}
// Return..
if ( Match(tok, "return") )
@ -431,6 +435,10 @@ static TOKEN *getcode(const TOKEN *tok, const char varname[])
addtoken("use");
}
// throw..
if ( Match(tok, "throw") )
addtoken("throw");
// Assignment..
if ( Match(tok,"[)=] %var1% [;)]", varnames) )
addtoken("use");
@ -735,6 +743,12 @@ static void simplifycode(TOKEN *tok)
}
}
}
if ( Match(tok2, "throw") )
{
tok2->setstr( "return" );
done = false;
}
}
}
}

View File

@ -1,4 +1,4 @@
/*
/*
* c++check - c/c++ syntax checking
* Copyright (C) 2007 Daniel Marjamäki
*
@ -106,8 +106,15 @@ private:
TEST_CASE( class1 );
TEST_CASE( class2 );
TEST_CASE( throw1 );
TEST_CASE( linux_list_1 );
TEST_CASE( linux_list_2 );
}
void simple1()
{
check( "void f()\n"
@ -762,6 +769,55 @@ private:
void throw1()
{
check( "void foo()\n"
"{\n"
" char *str = new char[10];\n"
" if ( ! abc )\n"
" throw 123;\n"
" delete [] str;\n"
"}\n" );
ASSERT_EQUALS( std::string("[test.cpp:5]: Memory leak: str\n"), errout.str() );
}
void linux_list_1()
{
check( "struct AB\n"
"{\n"
" int a;\n"
" int b;\n"
"};\n"
"void foo()\n"
"{\n"
" struct AB *ab = new AB;\n"
" func(&ab->a);\n"
"}\n" );
ASSERT_EQUALS( std::string(""), errout.str() );
}
void linux_list_2()
{
check( "struct AB\n"
"{\n"
" int a;\n"
" int b;\n"
"};\n"
"void foo()\n"
"{\n"
" struct AB *ab = new AB;\n"
" func(&ab->b);\n"
"}\n" );
ASSERT_EQUALS( std::string("[test.cpp:10]: Memory leak: ab\n"), errout.str() );
}
};