struct member usage: fixed false positives
This commit is contained in:
parent
be2a10bfb6
commit
a4d7ce1620
|
@ -625,28 +625,24 @@ void CheckOther::CheckStructMemberUsage()
|
|||
|
||||
if (structname && Token::Match(tok, "[{;]"))
|
||||
{
|
||||
const Token *variableToken = 0;
|
||||
const char *varname = 0;
|
||||
if (Token::Match(tok->next(), "%type% %var% [;[]"))
|
||||
variableToken = tok->tokAt( 2 );
|
||||
varname = tok->strAt( 2 );
|
||||
else if (Token::Match(tok->next(), "%type% %type% %var% [;[]"))
|
||||
variableToken = tok->tokAt( 2 );
|
||||
varname = tok->strAt( 2 );
|
||||
else if (Token::Match(tok->next(), "%type% * %var% [;[]"))
|
||||
variableToken = tok->tokAt( 3 );
|
||||
varname = tok->strAt( 3 );
|
||||
else if (Token::Match(tok->next(), "%type% %type% * %var% [;[]"))
|
||||
variableToken = tok->tokAt( 4 );
|
||||
varname = tok->strAt( 4 );
|
||||
else
|
||||
continue;
|
||||
|
||||
const std::string usagePattern( ". " + std::string(varname) );
|
||||
bool used = false;
|
||||
for ( const Token *tok2 = _tokenizer->tokens(); tok2; tok2 = tok2->next() )
|
||||
{
|
||||
if ( tok->fileIndex() != 0 )
|
||||
continue;
|
||||
|
||||
if (Token::Match(tok2, ". %varid%", variableToken->varId() ))
|
||||
if (Token::simpleMatch(tok2, usagePattern.c_str() ))
|
||||
{
|
||||
if ( Token::simpleMatch(tok2->tokAt(2), "=") )
|
||||
continue;
|
||||
used = true;
|
||||
break;
|
||||
}
|
||||
|
@ -655,7 +651,7 @@ void CheckOther::CheckStructMemberUsage()
|
|||
if ( ! used )
|
||||
{
|
||||
std::ostringstream errmsg;
|
||||
errmsg << _tokenizer->fileLine(tok) << ": struct member '" << structname << "::" << variableToken->str() << "' is never read";
|
||||
errmsg << _tokenizer->fileLine(tok->next()) << ": struct member '" << structname << "::" << varname << "' is never used";
|
||||
_errorLogger->reportErr(errmsg.str());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,9 +73,9 @@ private:
|
|||
" int b;\n"
|
||||
" int c;\n"
|
||||
"};\n" );
|
||||
ASSERT_EQUALS( std::string("[test.cpp:2]: struct member 'abc::a' is never read\n"
|
||||
"[test.cpp:3]: struct member 'abc::b' is never read\n"
|
||||
"[test.cpp:4]: struct member 'abc::c' is never read\n"), errout.str() );
|
||||
ASSERT_EQUALS( std::string("[test.cpp:3]: struct member 'abc::a' is never used\n"
|
||||
"[test.cpp:4]: struct member 'abc::b' is never used\n"
|
||||
"[test.cpp:5]: struct member 'abc::c' is never used\n"), errout.str() );
|
||||
}
|
||||
|
||||
void structmember2()
|
||||
|
|
Loading…
Reference in New Issue