Removed CheckOther::warningIf

This commit is contained in:
Daniel Marjamäki 2009-10-04 13:32:04 +02:00
parent af5a695f82
commit 7f6fcc6556
2 changed files with 0 additions and 130 deletions

View File

@ -215,125 +215,6 @@ void CheckOther::redundantCondition2()
//---------------------------------------------------------------------------
// if (condition) ....
//---------------------------------------------------------------------------
void CheckOther::warningIf()
{
if (ErrorLogger::ifNoAction(*_settings))
{
// Search for 'if (condition);'
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
{
if (!Token::simpleMatch(tok, "if ("))
continue;
// Search for the end paranthesis for the condition..
int parlevel = 0;
for (const Token *tok2 = tok->next(); tok2; tok2 = tok2->next())
{
if (tok2->str() == "(")
++parlevel;
else if (tok2->str() == ")")
{
--parlevel;
if (parlevel <= 0)
{
if (Token::Match(tok2, ") ; !!else"))
{
ifNoActionError(tok);
}
break;
}
}
}
}
}
if (_settings->_checkCodingStyle)
{
// Search for 'a=b; if (a==b)'
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
{
// Begin statement?
if (! Token::Match(tok, "[;{}]"))
continue;
tok = tok->next();
if (! tok)
break;
if (!Token::Match(tok, "%var% = %var% ; if ( %var%"))
continue;
if (strcmp(tok->strAt(9), ")") != 0)
continue;
// var1 = var2 ; if ( var3 cond var4 )
unsigned int var1 = tok->tokAt(0)->varId();
unsigned int var2 = tok->tokAt(2)->varId();
unsigned int var3 = tok->tokAt(6)->varId();
const char *cond = tok->strAt(7);
unsigned int var4 = tok->tokAt(8)->varId();
if (var1 == 0 || var2 == 0 || var3 == 0 || var4 == 0)
continue;
if (var1 == var2 || var3 == var4)
continue;
// Check that var3 is equal with either var1 or var2
if (var1 != var3 && var2 != var3)
continue;
// Check that var4 is equal with either var1 or var2
if (var1 != var4 && var2 != var4)
continue;
// Check that there is a condition..
static const char * const p[6] = {"==", "<=", ">=", "!=", "<", ">"};
bool iscond = false;
for (int i = 0; i < 6; i++)
{
if (strcmp(cond, p[i]) == 0)
{
iscond = true;
break;
}
}
if (!iscond)
continue;
// If there are casting involved it's hard to know if the
// condition is true or false
const Token *vardecl1 = Token::findmatch(_tokenizer->tokens(), "; %type% %varid% ;", var1);
if (!vardecl1)
continue;
const Token *vardecl2 = Token::findmatch(_tokenizer->tokens(), "; %type% %varid% ;", var2);
if (!vardecl2)
continue;
// variable 1 & 2 must be the same type..
if (vardecl1->next()->str() != vardecl2->next()->str())
continue;
// we found the error. Report.
bool b = false;
for (int i = 0; i < 6; i++)
{
if (strcmp(cond, p[i]) == 0)
b = (i < 3);
}
conditionAlwaysTrueFalse(tok->tokAt(4), b ? "True" : "False");
}
}
}
//---------------------------------------------------------------------------
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// strtol(str, 0, radix) <- radix must be 0 or 2-36 // strtol(str, 0, radix) <- radix must be 0 or 2-36
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -1273,11 +1154,6 @@ void CheckOther::dangerousUsageStrtolError(const Token *tok)
reportError(tok, Severity::error, "dangerousUsageStrtol", "Invalid radix in call to strtol or strtoul. Must be 0 or 2-36"); reportError(tok, Severity::error, "dangerousUsageStrtol", "Invalid radix in call to strtol or strtoul. Must be 0 or 2-36");
} }
void CheckOther::ifNoActionError(const Token *tok)
{
reportError(tok, Severity::style, "ifNoAction", "Found redundant if condition - 'if (condition);'");
}
void CheckOther::sprintfOverlappingDataError(const Token *tok, const std::string &varname) void CheckOther::sprintfOverlappingDataError(const Token *tok, const std::string &varname)
{ {
reportError(tok, Severity::error, "sprintfOverlappingData", "Overlapping data buffer " + varname + "\nWhen using sprintf the same buffer must not be used both for output and input. The behaviour is undefined when that happens.\nFor example: 'sprintf(str,\"<%s>\",str);'"); reportError(tok, Severity::error, "sprintfOverlappingData", "Overlapping data buffer " + varname + "\nWhen using sprintf the same buffer must not be used both for output and input. The behaviour is undefined when that happens.\nFor example: 'sprintf(str,\"<%s>\",str);'");

View File

@ -63,7 +63,6 @@ public:
if (settings->_checkCodingStyle) if (settings->_checkCodingStyle)
{ {
checkOther.warningRedundantCode(); checkOther.warningRedundantCode();
checkOther.warningIf();
checkOther.checkVariableScope(); checkOther.checkVariableScope();
checkOther.checkConstantFunctionParameter(); checkOther.checkConstantFunctionParameter();
checkOther.checkStructMemberUsage(); checkOther.checkStructMemberUsage();
@ -85,9 +84,6 @@ public:
// Redundant code // Redundant code
void warningRedundantCode(); void warningRedundantCode();
// Warning upon: if (condition);
void warningIf();
// Invalid function usage.. // Invalid function usage..
void invalidFunctionUsage(); void invalidFunctionUsage();
@ -133,7 +129,6 @@ public:
void redundantIfDelete0Error(const Token *tok); void redundantIfDelete0Error(const Token *tok);
void redundantIfRemoveError(const Token *tok); void redundantIfRemoveError(const Token *tok);
void dangerousUsageStrtolError(const Token *tok); void dangerousUsageStrtolError(const Token *tok);
void ifNoActionError(const Token *tok);
void sprintfOverlappingDataError(const Token *tok, const std::string &varname); void sprintfOverlappingDataError(const Token *tok, const std::string &varname);
void udivError(const Token *tok); void udivError(const Token *tok);
void udivWarning(const Token *tok); void udivWarning(const Token *tok);
@ -156,7 +151,6 @@ public:
redundantIfDelete0Error(0); redundantIfDelete0Error(0);
redundantIfRemoveError(0); redundantIfRemoveError(0);
dangerousUsageStrtolError(0); dangerousUsageStrtolError(0);
ifNoActionError(0);
sprintfOverlappingDataError(0, "varname"); sprintfOverlappingDataError(0, "varname");
udivError(0); udivError(0);
udivWarning(0); udivWarning(0);