Skip to content

Commit 38af865

Browse files
committed
Fixed false positive: Member variable not initialized in the constructor with array and (*this) (danmar#5754)
1 parent cbb8360 commit 38af865

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

lib/checkclass.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ void CheckClass::initializeVarList(const Function &func, std::list<const Functio
528528
}
529529

530530
if (!Token::Match(ftok->next(), "::| %var%") &&
531-
!Token::Match(ftok->next(), "this . %var%") &&
531+
!Token::Match(ftok->next(), "*| this . %var%") &&
532532
!Token::Match(ftok->next(), "* %var% =") &&
533533
!Token::Match(ftok->next(), "( * this ) . %var%"))
534534
continue;
@@ -700,6 +700,8 @@ void CheckClass::initializeVarList(const Function &func, std::list<const Functio
700700
// Assignment of array item of member variable?
701701
else if (Token::Match(ftok, "* %var% =")) {
702702
assignVar(ftok->next()->str(), scope, usage);
703+
} else if (Token::Match(ftok, "* this . %var% =")) {
704+
assignVar(ftok->strAt(3), scope, usage);
703705
}
704706

705707
// The functions 'clear' and 'Clear' are supposed to initialize variable.

test/testconstructors.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2171,6 +2171,17 @@ class TestConstructors : public TestFixture {
21712171
" char name[255];\n"
21722172
"};");
21732173
ASSERT_EQUALS("", errout.str());
2174+
2175+
// #5754
2176+
check("class John\n"
2177+
"{\n"
2178+
"public:\n"
2179+
" John() {*this->name = '\\0';}\n"
2180+
"\n"
2181+
"private:\n"
2182+
" char name[255];\n"
2183+
"};");
2184+
ASSERT_EQUALS("", errout.str());
21742185
}
21752186

21762187
void uninitVarArray3() {

0 commit comments

Comments
 (0)