validator bugs are now printed using the errorlogger
This commit is contained in:
parent
f927375b7e
commit
57aac9270a
|
@ -542,11 +542,8 @@ void CppCheck::checkFile(const std::string &code, const char FileName[])
|
||||||
bool result = _tokenizer.simplifyTokenList();
|
bool result = _tokenizer.simplifyTokenList();
|
||||||
TIMER_END("Tokenizer::simplifyTokenList");
|
TIMER_END("Tokenizer::simplifyTokenList");
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
|
||||||
std::cerr << "### A bug in the Cppcheck itself, while checking: " << FileName << "\n";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (_settings.enableId != "*" || _settings.enableId.find(",unusedFunctions,") != std::string::npos)
|
if (_settings.enableId != "*" || _settings.enableId.find(",unusedFunctions,") != std::string::npos)
|
||||||
|
|
|
@ -605,10 +605,7 @@ bool Tokenizer::tokenize(std::istream &code, const char FileName[])
|
||||||
|
|
||||||
setVarId();
|
setVarId();
|
||||||
if (!validate())
|
if (!validate())
|
||||||
{
|
|
||||||
std::cerr << "### A bug in the Cppcheck itself, while checking: " << FileName << "\n";
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -4293,6 +4290,42 @@ void Tokenizer::syntaxError(const Token *tok, char c)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tokenizer::cppcheckError(const Token *tok) const
|
||||||
|
{
|
||||||
|
if (!_errorLogger && tok)
|
||||||
|
{
|
||||||
|
std::ostringstream err;
|
||||||
|
err << "### Unlogged error at Tokenizer::cppcheckError";
|
||||||
|
if (_settings && _settings->_debug)
|
||||||
|
{
|
||||||
|
throw std::runtime_error(err.str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << err.str() << std::endl;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::list<ErrorLogger::ErrorMessage::FileLocation> locationList;
|
||||||
|
if (tok)
|
||||||
|
{
|
||||||
|
ErrorLogger::ErrorMessage::FileLocation loc;
|
||||||
|
loc.line = tok->linenr();
|
||||||
|
loc.file = file(tok);
|
||||||
|
locationList.push_back(loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
const ErrorLogger::ErrorMessage errmsg(locationList,
|
||||||
|
"error",
|
||||||
|
"### A bug was found from cppcheck. Please report it.",
|
||||||
|
"cppcheckError");
|
||||||
|
|
||||||
|
if (_errorLogger)
|
||||||
|
_errorLogger->reportErr(errmsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Tokenizer::simplifyMathFunctions()
|
void Tokenizer::simplifyMathFunctions()
|
||||||
{
|
{
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
@ -4554,7 +4587,7 @@ bool Tokenizer::validate() const
|
||||||
{
|
{
|
||||||
if (tok->link() == 0)
|
if (tok->link() == 0)
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(tok);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4566,25 +4599,25 @@ bool Tokenizer::validate() const
|
||||||
{
|
{
|
||||||
if (tok->link() == 0)
|
if (tok->link() == 0)
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(tok);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (linktok.empty() == true)
|
if (linktok.empty() == true)
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(tok);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tok->link() != linktok.top())
|
if (tok->link() != linktok.top())
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(tok);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tok != tok->link()->link())
|
if (tok != tok->link()->link())
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(tok);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4594,14 +4627,14 @@ bool Tokenizer::validate() const
|
||||||
|
|
||||||
if (tok->link() != 0)
|
if (tok->link() != 0)
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(tok);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!linktok.empty())
|
if (!linktok.empty())
|
||||||
{
|
{
|
||||||
assert(0);
|
cppcheckError(linktok.top());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -328,6 +328,12 @@ private:
|
||||||
|
|
||||||
void insertTokens(Token *dest, const Token *src, unsigned int n);
|
void insertTokens(Token *dest, const Token *src, unsigned int n);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send error message to error logger about internal bug.
|
||||||
|
* @param tok, the token that this bug concerns.
|
||||||
|
*/
|
||||||
|
void cppcheckError(const Token *tok) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup links for tokens so that one can call Token::link().
|
* Setup links for tokens so that one can call Token::link().
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue