fix #2792 (false positive: Member variable 'class::m_val' is not assigned a value in 'class::operator=')
This commit is contained in:
parent
287840e6bc
commit
42316f3e0b
|
@ -308,7 +308,7 @@ void CheckClass::initializeVarList(const Function &func, std::list<std::string>
|
||||||
ftok = ftok->next();
|
ftok = ftok->next();
|
||||||
|
|
||||||
// Using the operator= function to initialize all variables..
|
// Using the operator= function to initialize all variables..
|
||||||
if (Token::simpleMatch(ftok->next(), "* this ="))
|
if (Token::Match(ftok->next(), "return| * this ="))
|
||||||
{
|
{
|
||||||
assignAllVar(usage);
|
assignAllVar(usage);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -63,6 +63,7 @@ private:
|
||||||
TEST_CASE(uninitVar16);
|
TEST_CASE(uninitVar16);
|
||||||
TEST_CASE(uninitVar17);
|
TEST_CASE(uninitVar17);
|
||||||
TEST_CASE(uninitVar18); // ticket #2465
|
TEST_CASE(uninitVar18); // ticket #2465
|
||||||
|
TEST_CASE(uninitVar19); // ticket #2792
|
||||||
TEST_CASE(uninitVarEnum);
|
TEST_CASE(uninitVarEnum);
|
||||||
TEST_CASE(uninitVarStream);
|
TEST_CASE(uninitVarStream);
|
||||||
TEST_CASE(uninitVarTypedef);
|
TEST_CASE(uninitVarTypedef);
|
||||||
|
@ -2183,6 +2184,31 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:9]: (warning) Member variable 'A::value' is not initialized in the constructor.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:9]: (warning) Member variable 'A::value' is not initialized in the constructor.\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uninitVar19() // ticket #2792
|
||||||
|
{
|
||||||
|
checkUninitVar("class mystring\n"
|
||||||
|
"{\n"
|
||||||
|
" char* m_str;\n"
|
||||||
|
" int m_len;\n"
|
||||||
|
"public:\n"
|
||||||
|
" mystring(const char* str)\n"
|
||||||
|
" {\n"
|
||||||
|
" m_len = strlen(str);\n"
|
||||||
|
" m_str = (char*) malloc(m_len+1);\n"
|
||||||
|
" memcpy(m_str, str, m_len+1);\n"
|
||||||
|
" }\n"
|
||||||
|
" mystring& operator=(const mystring& copy)\n"
|
||||||
|
" {\n"
|
||||||
|
" return (*this = copy.m_str);\n"
|
||||||
|
" }\n"
|
||||||
|
" ~mystring()\n"
|
||||||
|
" {\n"
|
||||||
|
" free(m_str);\n"
|
||||||
|
" }\n"
|
||||||
|
"};\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void uninitVarArray1()
|
void uninitVarArray1()
|
||||||
{
|
{
|
||||||
checkUninitVar("class John\n"
|
checkUninitVar("class John\n"
|
||||||
|
|
Loading…
Reference in New Issue