stringLiteralWrite: only check in function scopes

This commit is contained in:
Daniel Marjamäki 2015-05-10 10:34:13 +02:00
parent 96891dface
commit 075b07fb6c
1 changed files with 15 additions and 10 deletions

View File

@ -34,16 +34,21 @@ namespace {
//---------------------------------------------------------------------------
void CheckString::stringLiteralWrite()
{
for (const Token* tok = _tokenizer->tokens(); tok; tok = tok->next()) {
if (!tok->variable() || !tok->variable()->isPointer())
continue;
const Token *str = tok->getValueTokenMinStrSize();
if (!str)
continue;
if (Token::Match(tok, "%var% [") && Token::simpleMatch(tok->linkAt(1), "] ="))
stringLiteralWriteError(tok);
else if (Token::Match(tok->previous(), "* %var% ="))
stringLiteralWriteError(tok);
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
const std::size_t functions = symbolDatabase->functionScopes.size();
for (std::size_t i = 0; i < functions; ++i) {
const Scope * scope = symbolDatabase->functionScopes[i];
for (const Token* tok = scope->classStart->next(); tok != scope->classEnd; tok = tok->next()) {
if (!tok->variable() || !tok->variable()->isPointer())
continue;
const Token *str = tok->getValueTokenMinStrSize();
if (!str)
continue;
if (Token::Match(tok, "%var% [") && Token::simpleMatch(tok->linkAt(1), "] ="))
stringLiteralWriteError(tok);
else if (Token::Match(tok->previous(), "* %var% ="))
stringLiteralWriteError(tok);
}
}
}