Fixed #1080 (false positive: member variable not initialized)
This commit is contained in:
parent
9646f62ec1
commit
4d185f0935
|
@ -241,12 +241,20 @@ void CheckClass::initializeVarList(const Token *tok1, const Token *ftok, Var *va
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Token::Match(ftok->next(), "%var%") && !Token::Match(ftok->next(), "this . %var%"))
|
if (!Token::Match(ftok->next(), "%var%") &&
|
||||||
|
!Token::Match(ftok->next(), "this . %var%") &&
|
||||||
|
!Token::Match(ftok->next(), "( * this ) . %var%"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Goto the first token in this statement..
|
// Goto the first token in this statement..
|
||||||
ftok = ftok->next();
|
ftok = ftok->next();
|
||||||
|
|
||||||
|
// Skip "( * this )"
|
||||||
|
if (Token::simpleMatch(ftok, "( * this ) ."))
|
||||||
|
{
|
||||||
|
ftok = ftok->tokAt(5);
|
||||||
|
}
|
||||||
|
|
||||||
// Skip "this->"
|
// Skip "this->"
|
||||||
if (Token::simpleMatch(ftok, "this ."))
|
if (Token::simpleMatch(ftok, "this ."))
|
||||||
ftok = ftok->tokAt(2);
|
ftok = ftok->tokAt(2);
|
||||||
|
|
|
@ -45,6 +45,7 @@ private:
|
||||||
TEST_CASE(virtualDestructorTemplate);
|
TEST_CASE(virtualDestructorTemplate);
|
||||||
|
|
||||||
TEST_CASE(uninitVar1);
|
TEST_CASE(uninitVar1);
|
||||||
|
TEST_CASE(uninitVar2);
|
||||||
TEST_CASE(uninitVarEnum);
|
TEST_CASE(uninitVarEnum);
|
||||||
TEST_CASE(uninitVarStream);
|
TEST_CASE(uninitVarStream);
|
||||||
TEST_CASE(uninitVarTypedef);
|
TEST_CASE(uninitVarTypedef);
|
||||||
|
@ -397,6 +398,18 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uninitVar2()
|
||||||
|
{
|
||||||
|
checkUninitVar("class John\n"
|
||||||
|
"{\n"
|
||||||
|
"public:\n"
|
||||||
|
" John() { (*this).i = 0; }\n"
|
||||||
|
"private:\n"
|
||||||
|
" int i;\n"
|
||||||
|
"};\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void uninitVarArray()
|
void uninitVarArray()
|
||||||
{
|
{
|
||||||
checkUninitVar("class John\n"
|
checkUninitVar("class John\n"
|
||||||
|
|
Loading…
Reference in New Issue