Replaced _settings->isEnabled("style") by _settings->isEnabled("warning") wherever warnings are issued
This commit is contained in:
parent
ffc82a9d89
commit
d78c06dc3f
|
@ -119,7 +119,7 @@ void CheckBufferOverrun::possibleReadlinkBufferOverrunError(const Token* tok, co
|
|||
|
||||
void CheckBufferOverrun::strncatUsageError(const Token *tok)
|
||||
{
|
||||
if (_settings && !_settings->isEnabled("style"))
|
||||
if (_settings && !_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
reportError(tok, Severity::warning, "strncatUsage",
|
||||
|
@ -147,7 +147,7 @@ void CheckBufferOverrun::pointerOutOfBoundsError(const Token *tok, const std::st
|
|||
|
||||
void CheckBufferOverrun::sizeArgumentAsCharError(const Token *tok)
|
||||
{
|
||||
if (_settings && !_settings->isEnabled("style"))
|
||||
if (_settings && !_settings->isEnabled("warning"))
|
||||
return;
|
||||
reportError(tok, Severity::warning, "sizeArgumentAsChar", "The size argument is given as a char constant.");
|
||||
}
|
||||
|
@ -694,7 +694,7 @@ void CheckBufferOverrun::checkFunctionParameter(const Token &tok, unsigned int p
|
|||
}
|
||||
|
||||
// Check 'float x[10]' arguments in declaration
|
||||
if (_settings->isEnabled("style")) {
|
||||
if (_settings->isEnabled("warning")) {
|
||||
const Function* func = tok.function();
|
||||
|
||||
// If argument is '%type% a[num]' then check bounds against num
|
||||
|
@ -1041,7 +1041,7 @@ void CheckBufferOverrun::checkScope(const Token *tok, const std::vector<std::str
|
|||
(varid == 0 && Token::Match(tok, ("strcpy|strcat ( " + varnames + " , %str% )").c_str()))) {
|
||||
const std::size_t len = Token::getStrLength(tok->tokAt(varc + 4));
|
||||
if (total_size > 0 && len >= (unsigned int)total_size) {
|
||||
bufferOverrunError(tok, varid > 0 ? std::string("") : varnames);
|
||||
bufferOverrunError(tok, varid > 0 ? std::string() : varnames);
|
||||
continue;
|
||||
}
|
||||
} else if ((varid > 0 && Token::Match(tok, "strcpy|strcat ( %varid% , %var% )", varid)) ||
|
||||
|
@ -1229,7 +1229,7 @@ void CheckBufferOverrun::checkScope(const Token *tok, const ArrayInfo &arrayInfo
|
|||
unsigned int num = (unsigned int)MathLib::toLongNumber(param3->str());
|
||||
|
||||
// this is currently 'inconclusive'. See TestBufferOverrun::terminateStrncpy3
|
||||
if (num >= total_size && _settings->isEnabled("style") && _settings->inconclusive) {
|
||||
if (num >= total_size && _settings->isEnabled("warning") && _settings->inconclusive) {
|
||||
const Token *tok2 = tok->next()->link()->next();
|
||||
for (; tok2; tok2 = tok2->next()) {
|
||||
if (tok2->varId() == tok->tokAt(2)->varId()) {
|
||||
|
|
|
@ -50,7 +50,9 @@ CheckClass::CheckClass(const Tokenizer *tokenizer, const Settings *settings, Err
|
|||
|
||||
void CheckClass::constructors()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
bool style = _settings->isEnabled("style");
|
||||
bool warnings = _settings->isEnabled("warning");
|
||||
if (!style && !warnings)
|
||||
return;
|
||||
|
||||
const std::size_t classes = symbolDatabase->classAndStructScopes.size();
|
||||
|
@ -62,7 +64,7 @@ void CheckClass::constructors()
|
|||
continue;
|
||||
|
||||
// There are no constructors.
|
||||
if (scope->numConstructors == 0) {
|
||||
if (scope->numConstructors == 0 && style) {
|
||||
// If there is a private variable, there should be a constructor..
|
||||
std::list<Variable>::const_iterator var;
|
||||
for (var = scope->varlist.begin(); var != scope->varlist.end(); ++var) {
|
||||
|
@ -74,6 +76,9 @@ void CheckClass::constructors()
|
|||
}
|
||||
}
|
||||
|
||||
if (!warnings)
|
||||
continue;
|
||||
|
||||
// #3196 => bailout if there are nested unions
|
||||
// TODO: handle union variables better
|
||||
{
|
||||
|
@ -1071,7 +1076,7 @@ void CheckClass::operatorEqRetRefThisError(const Token *tok)
|
|||
|
||||
void CheckClass::operatorEqToSelf()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const std::size_t classes = symbolDatabase->classAndStructScopes.size();
|
||||
|
@ -1311,7 +1316,7 @@ void CheckClass::virtualDestructorError(const Token *tok, const std::string &Bas
|
|||
|
||||
void CheckClass::thisSubtraction()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const Token *tok = _tokenizer->tokens();
|
||||
|
|
|
@ -66,7 +66,7 @@ void CheckExceptionSafety::destructors()
|
|||
|
||||
void CheckExceptionSafety::deallocThrow()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* const symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
|
|
@ -307,7 +307,7 @@ void CheckIO::useClosedFileError(const Token *tok)
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckIO::invalidScanf()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning") && !_settings->isEnabled("portability"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase * const symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -343,7 +343,7 @@ void CheckIO::invalidScanf()
|
|||
}
|
||||
|
||||
else if (std::isalpha(formatstr[i]) || formatstr[i] == '[') {
|
||||
if (formatstr[i] == 's' || formatstr[i] == '[' || formatstr[i] == 'S' || (formatstr[i] == 'l' && formatstr[i+1] == 's')) // #3490 - field width limits are only necessary for string input
|
||||
if ((formatstr[i] == 's' || formatstr[i] == '[' || formatstr[i] == 'S' || (formatstr[i] == 'l' && formatstr[i+1] == 's')) && _settings->isEnabled("warning")) // #3490 - field width limits are only necessary for string input
|
||||
invalidScanfError(tok, false);
|
||||
else if (formatstr[i] != 'n' && formatstr[i] != 'c' && _settings->platformType != Settings::Win32A && _settings->platformType != Settings::Win32W && _settings->platformType != Settings::Win64 && _settings->isEnabled("portability"))
|
||||
invalidScanfError(tok, true); // Warn about libc bug in versions prior to 2.13-25
|
||||
|
@ -425,7 +425,7 @@ static bool isKnownType(const Variable* var, const Token* varTypeTok)
|
|||
void CheckIO::checkWrongPrintfScanfArguments()
|
||||
{
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
bool warning = _settings->isEnabled("style");
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
|
||||
std::size_t functions = symbolDatabase->functionScopes.size();
|
||||
for (std::size_t j = 0; j < functions; ++j) {
|
||||
|
|
|
@ -100,7 +100,7 @@ void CheckLeakAutoVar::deallocReturnError(const Token *tok, const std::string &v
|
|||
|
||||
void CheckLeakAutoVar::configurationInfo(const Token* tok, const std::string &functionName)
|
||||
{
|
||||
if (((!cfgalloc.empty() || !cfgdealloc.empty()) && _settings->isEnabled("style")) || _settings->experimental) {
|
||||
if (((!cfgalloc.empty() || !cfgdealloc.empty()) && _settings->isEnabled("information")) || _settings->experimental) {
|
||||
reportError(tok,
|
||||
Severity::information,
|
||||
"leakconfiguration",
|
||||
|
|
|
@ -2495,7 +2495,7 @@ void CheckMemoryLeakInClass::checkPublicFunctions(const Scope *scope, const Toke
|
|||
// Check that public functions deallocate the pointers that they allocate.
|
||||
// There is no checking how these functions are used and therefore it
|
||||
// isn't established if there is real leaks or not.
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const unsigned int varid = classtok->varId();
|
||||
|
|
|
@ -320,7 +320,7 @@ void CheckOther::clarifyConditionError(const Token *tok, bool assign, bool boolo
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::clarifyStatement()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -407,7 +407,7 @@ void CheckOther::bitwiseOnBooleanError(const Token *tok, const std::string &varn
|
|||
|
||||
void CheckOther::checkSuspiciousSemicolon()
|
||||
{
|
||||
if (!_settings->inconclusive || !_settings->isEnabled("style"))
|
||||
if (!_settings->inconclusive || !_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* const symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -486,7 +486,7 @@ static std::string analyzeType(const Token* tok)
|
|||
|
||||
void CheckOther::invalidPointerCast()
|
||||
{
|
||||
if (!_settings->isEnabled("style") && !_settings->isEnabled("portability"))
|
||||
if (!_settings->isEnabled("warning") && !_settings->isEnabled("portability"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* const symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -568,7 +568,7 @@ void CheckOther::invalidPointerCastError(const Token* tok, const std::string& fr
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkSizeofForNumericParameter()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -604,8 +604,7 @@ void CheckOther::sizeofForNumericParameterError(const Token *tok)
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkPipeParameterSize()
|
||||
{
|
||||
if (!_settings->isEnabled("warning")
|
||||
|| !_settings->standards.posix)
|
||||
if (!_settings->standards.posix)
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -682,7 +681,7 @@ void CheckOther::sizeofForArrayParameterError(const Token *tok)
|
|||
|
||||
void CheckOther::checkSizeofForPointerSize()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -796,7 +795,9 @@ static void eraseNotLocalArg(std::map<unsigned int, const Token*>& container, co
|
|||
|
||||
void CheckOther::checkRedundantAssignment()
|
||||
{
|
||||
if (!_settings->isEnabled("performance"))
|
||||
bool performance = _settings->isEnabled("performance");
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
if (!warning && !performance)
|
||||
return;
|
||||
|
||||
const SymbolDatabase* symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -840,9 +841,9 @@ void CheckOther::checkRedundantAssignment()
|
|||
}
|
||||
}
|
||||
if (error) {
|
||||
if (scope->type == Scope::eSwitch && Token::findmatch(it->second, "default|case", tok))
|
||||
if (scope->type == Scope::eSwitch && Token::findmatch(it->second, "default|case", tok) && warning)
|
||||
redundantAssignmentInSwitchError(it->second, tok, tok->str());
|
||||
else
|
||||
else if (performance)
|
||||
redundantAssignmentError(it->second, tok, tok->str(), nonLocal(it->second->variable())); // Inconclusive for non-local variables
|
||||
}
|
||||
it->second = tok;
|
||||
|
@ -871,9 +872,9 @@ void CheckOther::checkRedundantAssignment()
|
|||
if (it == memAssignments.end())
|
||||
memAssignments[param1->varId()] = tok;
|
||||
else {
|
||||
if (scope->type == Scope::eSwitch && Token::findmatch(it->second, "default|case", tok))
|
||||
if (scope->type == Scope::eSwitch && Token::findmatch(it->second, "default|case", tok) && warning)
|
||||
redundantCopyInSwitchError(it->second, tok, param1->str());
|
||||
else
|
||||
else if (performance)
|
||||
redundantCopyError(it->second, tok, param1->str());
|
||||
}
|
||||
}
|
||||
|
@ -963,7 +964,7 @@ static inline bool isFunctionOrBreakPattern(const Token *tok)
|
|||
|
||||
void CheckOther::checkRedundantAssignmentInSwitch()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -1196,7 +1197,7 @@ void CheckOther::switchCaseFallThrough(const Token *tok)
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkSuspiciousCaseInSwitch()
|
||||
{
|
||||
if (!_settings->inconclusive || !_settings->isEnabled("style"))
|
||||
if (!_settings->inconclusive || !_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -1241,7 +1242,7 @@ void CheckOther::suspiciousCaseInSwitchError(const Token* tok, const std::string
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkSuspiciousEqualityComparison()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
||||
|
@ -1274,9 +1275,7 @@ void CheckOther::checkSuspiciousEqualityComparison()
|
|||
// Skip over for() loop conditions because "for (;running==1;)"
|
||||
// is a bit strange, but not necessarily incorrect.
|
||||
tok = closeParen;
|
||||
}
|
||||
|
||||
if (Token::Match(tok, "[;{}] *| %var% == %any% ;")) {
|
||||
} else if (Token::Match(tok, "[;{}] *| %var% == %any% ;")) {
|
||||
|
||||
// Exclude compound statements surrounded by parentheses, such as
|
||||
// printf("%i\n", ({x==0;}));
|
||||
|
@ -1314,7 +1313,7 @@ static inline const Token *findSelfAssignPattern(const Token *start)
|
|||
|
||||
void CheckOther::checkSelfAssignment()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const Token *tok = findSelfAssignPattern(_tokenizer->tokens());
|
||||
|
@ -1364,7 +1363,7 @@ static inline const Token *findAssertPattern(const Token *start)
|
|||
|
||||
void CheckOther::checkAssignmentInAssert()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const Token *tok = findAssertPattern(_tokenizer->tokens());
|
||||
|
@ -1457,7 +1456,9 @@ static bool analyzeLogicOperatorCondition(const Condition& c1, const Condition&
|
|||
|
||||
void CheckOther::checkIncorrectLogicOperator()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
bool style = _settings->isEnabled("style");
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
if (!style && !warning)
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -1646,13 +1647,17 @@ void CheckOther::checkIncorrectLogicOperator()
|
|||
|
||||
if (error) {
|
||||
if (conditions[i].error == AlwaysFalse || conditions[i].error == AlwaysTrue) {
|
||||
if (warning) {
|
||||
const std::string text = cond1str + " " + op2Tok->str() + " " + cond2str;
|
||||
incorrectLogicOperatorError(term1Tok, text, conditions[i].error == AlwaysTrue);
|
||||
}
|
||||
} else {
|
||||
if (style) {
|
||||
const std::string text = "If " + cond1str + ", the comparison " + cond2str +
|
||||
" is always " + ((conditions[i].error == SecondTrue || conditions[i].error == AlwaysTrue) ? "true" : "false") + ".";
|
||||
redundantConditionError(term1Tok, text);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1772,7 +1777,7 @@ static bool isNonBoolStdType(const Variable* var)
|
|||
}
|
||||
void CheckOther::checkComparisonOfBoolWithInt()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* const symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -1947,7 +1952,7 @@ bool CheckOther::isSigned(const Variable* var) const
|
|||
|
||||
void CheckOther::checkUnsignedDivision()
|
||||
{
|
||||
bool style = _settings->isEnabled("style");
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
|
||||
const SymbolDatabase* symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
const std::size_t functions = symbolDatabase->functionScopes.size();
|
||||
|
@ -1968,7 +1973,7 @@ void CheckOther::checkUnsignedDivision()
|
|||
if (tok->strAt(1)[0] == '-' && isUnsigned(tok->tokAt(3)->variable())) {
|
||||
udivError(tok->next(), false);
|
||||
}
|
||||
} else if (Token::Match(tok->next(), "%var% / %var%") && _settings->inconclusive && style && !ifTok) {
|
||||
} else if (Token::Match(tok->next(), "%var% / %var%") && _settings->inconclusive && warning && !ifTok) {
|
||||
const Variable* var1 = tok->next()->variable();
|
||||
const Variable* var2 = tok->tokAt(3)->variable();
|
||||
if ((isUnsigned(var1) && isSigned(var2)) || (isUnsigned(var2) && isSigned(var1))) {
|
||||
|
@ -1995,7 +2000,7 @@ void CheckOther::udivError(const Token *tok, bool inconclusive)
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkMemsetZeroBytes()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -2227,7 +2232,7 @@ static bool isSignedChar(const Variable* var)
|
|||
|
||||
void CheckOther::checkCharVariable()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -2310,7 +2315,7 @@ void CheckOther::charBitOpError(const Token *tok)
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkIncompleteStatement()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
||||
|
@ -2661,7 +2666,7 @@ void CheckOther::comparisonOfBoolWithBoolError(const Token *tok, const std::stri
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkIncorrectStringCompare()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -3364,7 +3369,7 @@ void CheckOther::duplicateExpressionError(const Token *tok1, const Token *tok2,
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkAlwaysTrueOrFalseStringCompare()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const Token *tok = _tokenizer->tokens();
|
||||
|
@ -3426,7 +3431,7 @@ void CheckOther::alwaysTrueStringVariableCompareError(const Token *tok, const st
|
|||
//-----------------------------------------------------------------------------
|
||||
void CheckOther::checkSuspiciousStringCompare()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -3469,6 +3474,9 @@ void CheckOther::suspiciousStringCompareError(const Token* tok, const std::strin
|
|||
//-----------------------------------------------------------------------------
|
||||
void CheckOther::checkModuloAlwaysTrueFalse()
|
||||
{
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
const std::size_t functions = symbolDatabase->functionScopes.size();
|
||||
for (std::size_t i = 0; i < functions; ++i) {
|
||||
|
@ -3493,8 +3501,9 @@ void CheckOther::moduloAlwaysTrueFalseError(const Token* tok, const std::string&
|
|||
//-----------------------------------------------------------------------------
|
||||
void CheckOther::sizeofsizeof()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
||||
if (Token::Match(tok, "sizeof (| sizeof")) {
|
||||
sizeofsizeofError(tok);
|
||||
|
@ -3516,7 +3525,7 @@ void CheckOther::sizeofsizeofError(const Token *tok)
|
|||
//-----------------------------------------------------------------------------
|
||||
void CheckOther::sizeofCalculation()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
||||
|
@ -3575,7 +3584,7 @@ void CheckOther::redundantGetAndSetUserIdError(const Token *tok)
|
|||
//-----------------------------------------------------------------------------
|
||||
void CheckOther::suspiciousSizeofCalculation()
|
||||
{
|
||||
if (!_settings->isEnabled("style") || !_settings->inconclusive)
|
||||
if (!_settings->isEnabled("warning") || !_settings->inconclusive)
|
||||
return;
|
||||
|
||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
||||
|
@ -3635,7 +3644,7 @@ void CheckOther::assignBoolToPointerError(const Token *tok)
|
|||
//-----------------------------------------------------------------------------
|
||||
void CheckOther::checkComparisonOfBoolExpressionWithInt()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -3879,7 +3888,9 @@ void CheckOther::negativeBitwiseShiftError(const Token *tok)
|
|||
//---------------------------------------------------------------------------
|
||||
void CheckOther::checkIncompleteArrayFill()
|
||||
{
|
||||
if (!_settings->inconclusive || !_settings->isEnabled("style"))
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
bool portability = _settings->isEnabled("portability");
|
||||
if (!_settings->inconclusive || (!portability && !warning))
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -3895,9 +3906,10 @@ void CheckOther::checkIncompleteArrayFill()
|
|||
|
||||
if (MathLib::toLongNumber(tok->linkAt(1)->strAt(-1)) == var->dimension(0)) {
|
||||
unsigned int size = _tokenizer->sizeOfType(var->typeStartToken());
|
||||
if ((size != 1 && size != 100 && size != 0) || var->typeEndToken()->str() == "*")
|
||||
if ((size != 1 && size != 100 && size != 0) || var->typeEndToken()->str() == "*") {
|
||||
if (warning)
|
||||
incompleteArrayFillError(tok, var->name(), tok->str(), false);
|
||||
else if (var->typeStartToken()->str() == "bool" && _settings->isEnabled("portability")) // sizeof(bool) is not 1 on all platforms
|
||||
} else if (var->typeStartToken()->str() == "bool" && portability) // sizeof(bool) is not 1 on all platforms
|
||||
incompleteArrayFillError(tok, var->name(), tok->str(), true);
|
||||
}
|
||||
}
|
||||
|
@ -3921,7 +3933,7 @@ void CheckOther::incompleteArrayFillError(const Token* tok, const std::string& b
|
|||
void CheckOther::oppositeInnerCondition()
|
||||
{
|
||||
// FIXME: This check is experimental because of #4170 and #4186. Fix those tickets and remove the "experimental".
|
||||
if (!_settings->isEnabled("style") || !_settings->inconclusive || !_settings->experimental)
|
||||
if (!_settings->isEnabled("warning") || !_settings->inconclusive || !_settings->experimental)
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
|
|
@ -774,7 +774,9 @@ static bool if_findCompare(const Token * const tokBack, bool str)
|
|||
|
||||
void CheckStl::if_find()
|
||||
{
|
||||
if (!_settings->isEnabled("style"))
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
bool performance = _settings->isEnabled("performance");
|
||||
if (!warning && !performance)
|
||||
return;
|
||||
|
||||
const SymbolDatabase *symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -811,9 +813,9 @@ void CheckStl::if_find()
|
|||
continue;
|
||||
|
||||
// stl container
|
||||
if (Token::Match(decl, "std :: %var% < %type% > &| %varid%", varid))
|
||||
if (Token::Match(decl, "std :: %var% < %type% > &| %varid%", varid) && warning)
|
||||
if_findError(tok, false);
|
||||
else if (str)
|
||||
else if (str && performance)
|
||||
if_findError(tok, true);
|
||||
}
|
||||
}
|
||||
|
@ -849,24 +851,24 @@ void CheckStl::if_find()
|
|||
if (Token::Match(decl, "%var% <")) {
|
||||
decl = decl->tokAt(2);
|
||||
//stl-like
|
||||
if (Token::Match(decl, "std :: %var% < %type% > > &| %varid%", varid))
|
||||
if (Token::Match(decl, "std :: %var% < %type% > > &| %varid%", varid) && warning)
|
||||
if_findError(tok, false);
|
||||
//not stl-like, then let's hope it's a pointer or an array
|
||||
else if (Token::Match(decl, "%type% >")) {
|
||||
decl = decl->tokAt(2);
|
||||
if (Token::Match(decl, "* &| %varid%", varid) ||
|
||||
Token::Match(decl, "&| %varid% [ ]| %any% ]| ", varid))
|
||||
if ((Token::Match(decl, "* &| %varid%", varid) ||
|
||||
Token::Match(decl, "&| %varid% [ ]| %any% ]| ", varid)) && warning)
|
||||
if_findError(tok, false);
|
||||
}
|
||||
|
||||
else if (Token::Match(decl, "std :: string|wstring > &| %varid%", varid))
|
||||
else if (Token::Match(decl, "std :: string|wstring > &| %varid%", varid) && performance)
|
||||
if_findError(tok, true);
|
||||
}
|
||||
|
||||
else if (decl && decl->str() == "string") {
|
||||
decl = decl->next();
|
||||
if (Token::Match(decl, "* &| %varid%", varid) ||
|
||||
Token::Match(decl, "&| %varid% [ ]| %any% ]| ", varid))
|
||||
Token::Match(decl, "&| %varid% [ ]| %any% ]| ", varid) && performance)
|
||||
if_findError(tok, true);
|
||||
}
|
||||
}
|
||||
|
@ -874,7 +876,7 @@ void CheckStl::if_find()
|
|||
|
||||
else if (Token::Match(tok, "std :: find|find_if (")) {
|
||||
// check that result is checked properly
|
||||
if (!if_findCompare(tok->linkAt(3), false)) {
|
||||
if (!if_findCompare(tok->linkAt(3), false) && warning) {
|
||||
if_findError(tok, false);
|
||||
}
|
||||
}
|
||||
|
@ -1017,6 +1019,9 @@ void CheckStl::redundantIfRemoveError(const Token *tok)
|
|||
|
||||
void CheckStl::missingComparison()
|
||||
{
|
||||
if (!_settings->isEnabled("warning"))
|
||||
return;
|
||||
|
||||
const SymbolDatabase* const symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
||||
for (std::list<Scope>::const_iterator i = symbolDatabase->scopeList.begin(); i != symbolDatabase->scopeList.end(); ++i) {
|
||||
|
@ -1363,8 +1368,8 @@ void CheckStl::autoPointerArrayError(const Token *tok)
|
|||
void CheckStl::uselessCalls()
|
||||
{
|
||||
bool performance = _settings->isEnabled("performance");
|
||||
bool style = _settings->isEnabled("style");
|
||||
if (!performance && !style)
|
||||
bool warning = _settings->isEnabled("warning");
|
||||
if (!performance && !warning)
|
||||
return;
|
||||
|
||||
const SymbolDatabase* symbolDatabase = _tokenizer->getSymbolDatabase();
|
||||
|
@ -1373,7 +1378,7 @@ void CheckStl::uselessCalls()
|
|||
const Scope * scope = symbolDatabase->functionScopes[i];
|
||||
for (const Token* tok = scope->classStart; tok != scope->classEnd; tok = tok->next()) {
|
||||
if (tok->varId() && Token::Match(tok, "%var% . compare|find|rfind|find_first_not_of|find_first_of|find_last_not_of|find_last_of ( %var% [,)]") &&
|
||||
tok->varId() == tok->tokAt(4)->varId() && style) {
|
||||
tok->varId() == tok->tokAt(4)->varId() && warning) {
|
||||
uselessCallsReturnValueError(tok->tokAt(4), tok->str(), tok->strAt(2));
|
||||
} else if (tok->varId() && Token::Match(tok, "%var% . swap ( %var% )") &&
|
||||
tok->varId() == tok->tokAt(4)->varId() && performance) {
|
||||
|
@ -1386,7 +1391,7 @@ void CheckStl::uselessCalls()
|
|||
uselessCallsSubstrError(tok, false);
|
||||
} else if (Token::simpleMatch(tok->linkAt(2)->tokAt(-2), ", 0 )"))
|
||||
uselessCallsSubstrError(tok, true);
|
||||
} else if (Token::Match(tok, "[{};] %var% . empty ( ) ;") && style)
|
||||
} else if (Token::Match(tok, "[{};] %var% . empty ( ) ;") && warning)
|
||||
uselessCallsEmptyError(tok->next());
|
||||
else if (Token::Match(tok, "[{};] std :: remove|remove_if|unique (") && tok->tokAt(5)->nextArgument())
|
||||
uselessCallsRemoveError(tok->next(), tok->strAt(3));
|
||||
|
|
|
@ -41,6 +41,7 @@ private:
|
|||
settings.inconclusive = true;
|
||||
settings.standards.posix = true;
|
||||
settings.experimental = experimental;
|
||||
settings.addEnabled("warning");
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("portability");
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
|
||||
// Tokenize..
|
||||
Tokenizer tokenizer(&settings, this);
|
||||
|
|
|
@ -768,7 +768,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
|
||||
// Tokenize..
|
||||
Tokenizer tokenizer(&settings, this);
|
||||
|
@ -2369,7 +2369,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
|
||||
// Tokenize..
|
||||
Tokenizer tokenizer(&settings, this);
|
||||
|
|
|
@ -40,6 +40,7 @@ private:
|
|||
Settings settings;
|
||||
settings.inconclusive = showAll;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
|
||||
// Tokenize..
|
||||
Tokenizer tokenizer(&settings, this);
|
||||
|
|
|
@ -40,7 +40,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
settings.inconclusive = inconclusive;
|
||||
|
||||
// Tokenize..
|
||||
|
|
|
@ -40,7 +40,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
|
||||
// Tokenize..
|
||||
Tokenizer tokenizer(&settings, this);
|
||||
|
|
|
@ -53,6 +53,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("warning");
|
||||
settings.addEnabled("style");
|
||||
if (portability)
|
||||
settings.addEnabled("portability");
|
||||
|
|
|
@ -3898,6 +3898,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("warning");
|
||||
settings.addEnabled("style");
|
||||
|
||||
// Tokenize..
|
||||
|
|
|
@ -253,6 +253,7 @@ private:
|
|||
filename = "test.cpp";
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("warning");
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("performance");
|
||||
settings.experimental = true;
|
||||
|
@ -944,7 +945,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("warning");
|
||||
if (portability)
|
||||
settings.addEnabled("portability");
|
||||
settings.inconclusive = inconclusive;
|
||||
|
|
|
@ -130,6 +130,7 @@ private:
|
|||
errout.str("");
|
||||
|
||||
Settings settings;
|
||||
settings.addEnabled("warning");
|
||||
settings.addEnabled("style");
|
||||
settings.addEnabled("performance");
|
||||
settings.inconclusive = inconclusive;
|
||||
|
|
Loading…
Reference in New Issue