Improved fix #6636: (False positive unreadVariable - scope analysis seems to fail to False positive unreadVariable)

This commit is contained in:
Frank Zingsheim 2015-04-09 21:09:31 +02:00
parent 4ceb24630d
commit 84830638a2
1 changed files with 8 additions and 5 deletions

View File

@ -80,14 +80,17 @@ static const Token * isFunctionHead(const Token *tok, const std::string &endsWit
return nullptr;
}
static bool isClassStructUnionStart(const Token * tok)
/**
* is tok the start brace { of a class, struct, union, or enum
*/
static bool isClassStructUnionEnumStart(const Token * tok)
{
if (tok->str() != "{")
if (!Token::Match(tok->previous(), "class|struct|union|enum|%name%|>|>> {"))
return false;
const Token * tok2 = tok->previous();
while (tok2 && !Token::Match(tok2, "class|struct|union|{|;"))
while (tok2 && !Token::Match(tok2, "class|struct|union|enum|{|}|;"))
tok2 = tok2->previous();
return Token::Match(tok2, "class|struct|union");
return Token::Match(tok2, "class|struct|union|enum");
}
//---------------------------------------------------------------------------
@ -2612,7 +2615,7 @@ void Tokenizer::setVarId()
isExecutable = true;
} else {
isExecutable = ((scopeStack.top().isExecutable || initlist || tok->strAt(-1) == "else") &&
!isClassStructUnionStart(tok));
!isClassStructUnionEnumStart(tok));
scopeInfo.push(variableId);
}
initlist = false;