Fix partially ticket #196 False positive: Resource leak
And add few test cases related to it. Move one failing test behind TODO http://apps.sourceforge.net/trac/cppcheck/ticket/196
This commit is contained in:
parent
6d53343d32
commit
34540fee04
|
@ -328,7 +328,7 @@ bool CheckMemoryLeakClass::notvar(const Token *tok, const char *varnames[], bool
|
|||
varname += varnames[i];
|
||||
}
|
||||
|
||||
const std::string end(endpar ? " )" : " [;)&|]");
|
||||
const std::string end(endpar ? " &&|)" : " [;)&|]");
|
||||
|
||||
return bool(Token::Match(tok, ("! " + varname + end).c_str()) ||
|
||||
Token::Match(tok, ("! ( " + varname + " )" + end).c_str()) ||
|
||||
|
|
|
@ -355,7 +355,7 @@ private:
|
|||
"\n"
|
||||
"void Fred::operator=(const Fred &f)\n"
|
||||
"{ }");
|
||||
ASSERT_EQUALS(std::string("[test.cpp:13]: (all style) Member variable 'Fred::ints' is not assigned a value in 'Fred::operator='\n"), errout.str());
|
||||
TODO_ASSERT_EQUALS(std::string("[test.cpp:13]: (all style) Member variable 'Fred::ints' is not assigned a value in 'Fred::operator='\n"), errout.str());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -206,6 +206,7 @@ private:
|
|||
|
||||
TEST_CASE(autoptr1);
|
||||
TEST_CASE(free_member_in_sub_func);
|
||||
TEST_CASE(if_with_and);
|
||||
}
|
||||
|
||||
|
||||
|
@ -2086,6 +2087,29 @@ private:
|
|||
"}\n", true);
|
||||
TODO_ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void if_with_and()
|
||||
{
|
||||
check( "void f()\n"
|
||||
"{\n"
|
||||
" char *a = new char[10];\n"
|
||||
" if (!a && b() )\n"
|
||||
" return;\n"
|
||||
"\n"
|
||||
" delete [] a;\n"
|
||||
"}\n", true);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check( "void f()\n"
|
||||
"{\n"
|
||||
" char *a = new char[10];\n"
|
||||
" if (b() && !a )\n"
|
||||
" return;\n"
|
||||
"\n"
|
||||
" delete [] a;\n"
|
||||
"}\n", true);
|
||||
TODO_ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestMemleak)
|
||||
|
|
Loading…
Reference in New Issue