Fixed #8850 (Array in-class initialization for private member considered uninitialized)
This commit is contained in:
parent
9d8f798aca
commit
4457faa26b
|
@ -109,8 +109,11 @@ void CheckClass::constructors()
|
||||||
if (scope->numConstructors == 0 && printStyle && !usedInUnion) {
|
if (scope->numConstructors == 0 && printStyle && !usedInUnion) {
|
||||||
// If there is a private variable, there should be a constructor..
|
// If there is a private variable, there should be a constructor..
|
||||||
for (const Variable &var : scope->varlist) {
|
for (const Variable &var : scope->varlist) {
|
||||||
|
const Token *initTok = var.nameToken();
|
||||||
|
while (Token::simpleMatch(initTok->next(), "["))
|
||||||
|
initTok = initTok->linkAt(1);
|
||||||
if (var.isPrivate() && !var.isStatic() && !Token::Match(var.nameToken(), "%varid% ; %varid% =", var.declarationId()) &&
|
if (var.isPrivate() && !var.isStatic() && !Token::Match(var.nameToken(), "%varid% ; %varid% =", var.declarationId()) &&
|
||||||
!Token::Match(var.nameToken(), "%var% {|=") &&
|
!Token::Match(initTok, "%var%|] {|=") &&
|
||||||
(!var.isClass() || (var.type() && var.type()->needInitialization == Type::True))) {
|
(!var.isClass() || (var.type() && var.type()->needInitialization == Type::True))) {
|
||||||
noConstructorError(scope->classDef, scope->className, scope->classDef->str() == "struct");
|
noConstructorError(scope->classDef, scope->className, scope->classDef->str() == "struct");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -585,6 +585,12 @@ private:
|
||||||
|
|
||||||
check("class Fred { int x=0; };");
|
check("class Fred { int x=0; };");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("class Fred { int x[1]={0}; };"); // #8850
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("class Fred { int x[1]{0}; };");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ticket #4290 "False Positive: style (noConstructor): The class 'foo' does not have a constructor."
|
// ticket #4290 "False Positive: style (noConstructor): The class 'foo' does not have a constructor."
|
||||||
|
|
Loading…
Reference in New Issue