Fixed false positive: Member variable not initialized in the constructor with array and (*this) (#5754)

This commit is contained in:
PKEuS 2014-09-29 16:49:20 +02:00
parent cbb8360b30
commit 38af865560
2 changed files with 14 additions and 1 deletions

View File

@ -528,7 +528,7 @@ void CheckClass::initializeVarList(const Function &func, std::list<const Functio
} }
if (!Token::Match(ftok->next(), "::| %var%") && if (!Token::Match(ftok->next(), "::| %var%") &&
!Token::Match(ftok->next(), "this . %var%") && !Token::Match(ftok->next(), "*| this . %var%") &&
!Token::Match(ftok->next(), "* %var% =") && !Token::Match(ftok->next(), "* %var% =") &&
!Token::Match(ftok->next(), "( * this ) . %var%")) !Token::Match(ftok->next(), "( * this ) . %var%"))
continue; continue;
@ -700,6 +700,8 @@ void CheckClass::initializeVarList(const Function &func, std::list<const Functio
// Assignment of array item of member variable? // Assignment of array item of member variable?
else if (Token::Match(ftok, "* %var% =")) { else if (Token::Match(ftok, "* %var% =")) {
assignVar(ftok->next()->str(), scope, usage); assignVar(ftok->next()->str(), scope, usage);
} else if (Token::Match(ftok, "* this . %var% =")) {
assignVar(ftok->strAt(3), scope, usage);
} }
// The functions 'clear' and 'Clear' are supposed to initialize variable. // The functions 'clear' and 'Clear' are supposed to initialize variable.

View File

@ -2171,6 +2171,17 @@ private:
" char name[255];\n" " char name[255];\n"
"};"); "};");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
// #5754
check("class John\n"
"{\n"
"public:\n"
" John() {*this->name = '\\0';}\n"
"\n"
"private:\n"
" char name[255];\n"
"};");
ASSERT_EQUALS("", errout.str());
} }
void uninitVarArray3() { void uninitVarArray3() {