Replace 'unsigned' with 'nonneg' in checkother
This commit is contained in:
parent
3637c486c4
commit
ef73a10e30
|
@ -85,7 +85,7 @@ void CheckOther::checkCastIntToCharAndBack()
|
||||||
|
|
||||||
const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase();
|
const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase();
|
||||||
for (const Scope * scope : symbolDatabase->functionScopes) {
|
for (const Scope * scope : symbolDatabase->functionScopes) {
|
||||||
std::map<unsigned int, std::string> vars;
|
std::map<int, std::string> vars;
|
||||||
for (const Token* tok = scope->bodyStart->next(); tok != scope->bodyEnd; tok = tok->next()) {
|
for (const Token* tok = scope->bodyStart->next(); tok != scope->bodyEnd; tok = tok->next()) {
|
||||||
// Quick check to see if any of the matches below have any chances
|
// Quick check to see if any of the matches below have any chances
|
||||||
if (!Token::Match(tok, "%var%|EOF %comp%|="))
|
if (!Token::Match(tok, "%var%|EOF %comp%|="))
|
||||||
|
@ -582,8 +582,8 @@ void CheckOther::checkRedundantAssignmentInSwitch()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Check the contents of the switch statement
|
// Check the contents of the switch statement
|
||||||
std::map<unsigned int, const Token*> varsWithBitsSet;
|
std::map<int, const Token*> varsWithBitsSet;
|
||||||
std::map<unsigned int, std::string> bitOperations;
|
std::map<int, std::string> bitOperations;
|
||||||
|
|
||||||
for (const Token *tok2 = switchScope.bodyStart->next(); tok2 != switchScope.bodyEnd; tok2 = tok2->next()) {
|
for (const Token *tok2 = switchScope.bodyStart->next(); tok2 != switchScope.bodyEnd; tok2 = tok2->next()) {
|
||||||
if (tok2->str() == "{") {
|
if (tok2->str() == "{") {
|
||||||
|
@ -621,7 +621,7 @@ void CheckOther::checkRedundantAssignmentInSwitch()
|
||||||
(tok2->strAt(1) == "|=" || tok2->strAt(1) == "&=") &&
|
(tok2->strAt(1) == "|=" || tok2->strAt(1) == "&=") &&
|
||||||
Token::Match(tok2->next()->astOperand2(), "%num%")) {
|
Token::Match(tok2->next()->astOperand2(), "%num%")) {
|
||||||
const std::string bitOp = tok2->strAt(1)[0] + tok2->strAt(2);
|
const std::string bitOp = tok2->strAt(1)[0] + tok2->strAt(2);
|
||||||
const std::map<unsigned int, const Token*>::const_iterator i2 = varsWithBitsSet.find(tok2->varId());
|
const std::map<int, const Token*>::const_iterator i2 = varsWithBitsSet.find(tok2->varId());
|
||||||
|
|
||||||
// This variable has not had a bit operation performed on it yet, so just make a note of it
|
// This variable has not had a bit operation performed on it yet, so just make a note of it
|
||||||
if (i2 == varsWithBitsSet.end()) {
|
if (i2 == varsWithBitsSet.end()) {
|
||||||
|
@ -646,7 +646,7 @@ void CheckOther::checkRedundantAssignmentInSwitch()
|
||||||
else if (Token::Match(tok2->previous(), ";|{|}|: %var% = %name% %or%|& %num% ;") &&
|
else if (Token::Match(tok2->previous(), ";|{|}|: %var% = %name% %or%|& %num% ;") &&
|
||||||
tok2->varId() == tok2->tokAt(2)->varId()) {
|
tok2->varId() == tok2->tokAt(2)->varId()) {
|
||||||
const std::string bitOp = tok2->strAt(3) + tok2->strAt(4);
|
const std::string bitOp = tok2->strAt(3) + tok2->strAt(4);
|
||||||
const std::map<unsigned int, const Token*>::const_iterator i2 = varsWithBitsSet.find(tok2->varId());
|
const std::map<int, const Token*>::const_iterator i2 = varsWithBitsSet.find(tok2->varId());
|
||||||
|
|
||||||
// This variable has not had a bit operation performed on it yet, so just make a note of it
|
// This variable has not had a bit operation performed on it yet, so just make a note of it
|
||||||
if (i2 == varsWithBitsSet.end()) {
|
if (i2 == varsWithBitsSet.end()) {
|
||||||
|
@ -978,7 +978,7 @@ bool CheckOther::checkInnerScope(const Token *tok, const Variable* var, bool& us
|
||||||
|
|
||||||
if (loopVariable && noContinue && tok->scope() == scope && !forHeadEnd && scope->type != Scope::eSwitch && Token::Match(tok, "%varid% =", var->declarationId())) { // Assigned in outer scope.
|
if (loopVariable && noContinue && tok->scope() == scope && !forHeadEnd && scope->type != Scope::eSwitch && Token::Match(tok, "%varid% =", var->declarationId())) { // Assigned in outer scope.
|
||||||
loopVariable = false;
|
loopVariable = false;
|
||||||
unsigned int indent = 0;
|
int indent = 0;
|
||||||
for (const Token* tok2 = tok->tokAt(2); tok2; tok2 = tok2->next()) { // Ensure that variable isn't used on right side of =, too
|
for (const Token* tok2 = tok->tokAt(2); tok2; tok2 = tok2->next()) { // Ensure that variable isn't used on right side of =, too
|
||||||
if (tok2->str() == "(")
|
if (tok2->str() == "(")
|
||||||
indent++;
|
indent++;
|
||||||
|
@ -1095,14 +1095,14 @@ void CheckOther::commaSeparatedReturnError(const Token *tok)
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Check for function parameters that should be passed by const reference
|
// Check for function parameters that should be passed by const reference
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
static std::size_t estimateSize(const Type* type, const Settings* settings, const SymbolDatabase* symbolDatabase, std::size_t recursionDepth = 0)
|
static int estimateSize(const Type* type, const Settings* settings, const SymbolDatabase* symbolDatabase, int recursionDepth = 0)
|
||||||
{
|
{
|
||||||
if (recursionDepth > 20)
|
if (recursionDepth > 20)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
std::size_t cumulatedSize = 0;
|
int cumulatedSize = 0;
|
||||||
for (const Variable&var : type->classScope->varlist) {
|
for (const Variable&var : type->classScope->varlist) {
|
||||||
std::size_t size = 0;
|
int size = 0;
|
||||||
if (var.isStatic())
|
if (var.isStatic())
|
||||||
continue;
|
continue;
|
||||||
if (var.isPointer() || var.isReference())
|
if (var.isPointer() || var.isReference())
|
||||||
|
@ -1158,7 +1158,7 @@ static bool canBeConst(const Variable *var)
|
||||||
return false;
|
return false;
|
||||||
} else if (parent->str() == "," || parent->str() == "(") { // function argument
|
} else if (parent->str() == "," || parent->str() == "(") { // function argument
|
||||||
const Token* tok3 = tok2->previous();
|
const Token* tok3 = tok2->previous();
|
||||||
unsigned int argNr = 0;
|
int argNr = 0;
|
||||||
while (tok3 && tok3->str() != "(") {
|
while (tok3 && tok3->str() != "(") {
|
||||||
if (tok3->link() && Token::Match(tok3, ")|]|}|>"))
|
if (tok3->link() && Token::Match(tok3, ")|]|}|>"))
|
||||||
tok3 = tok3->link();
|
tok3 = tok3->link();
|
||||||
|
@ -1516,7 +1516,7 @@ void CheckOther::zerodivError(const Token *tok, const ValueFlow::Value *value)
|
||||||
|
|
||||||
std::ostringstream errmsg;
|
std::ostringstream errmsg;
|
||||||
if (value->condition) {
|
if (value->condition) {
|
||||||
const unsigned int line = tok ? tok->linenr() : 0;
|
const int line = tok ? tok->linenr() : 0;
|
||||||
errmsg << ValueFlow::eitherTheConditionIsRedundant(value->condition)
|
errmsg << ValueFlow::eitherTheConditionIsRedundant(value->condition)
|
||||||
<< " or there is division by zero at line " << line << ".";
|
<< " or there is division by zero at line " << line << ".";
|
||||||
} else
|
} else
|
||||||
|
@ -1690,8 +1690,8 @@ void CheckOther::duplicateBranchError(const Token *tok1, const Token *tok2, Erro
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void CheckOther::checkInvalidFree()
|
void CheckOther::checkInvalidFree()
|
||||||
{
|
{
|
||||||
std::map<unsigned int, bool> inconclusive;
|
std::map<int, bool> inconclusive;
|
||||||
std::map<unsigned int, std::string> allocation;
|
std::map<int, std::string> allocation;
|
||||||
|
|
||||||
const bool printInconclusive = mSettings->inconclusive;
|
const bool printInconclusive = mSettings->inconclusive;
|
||||||
const SymbolDatabase* symbolDatabase = mTokenizer->getSymbolDatabase();
|
const SymbolDatabase* symbolDatabase = mTokenizer->getSymbolDatabase();
|
||||||
|
@ -1733,10 +1733,10 @@ void CheckOther::checkInvalidFree()
|
||||||
|
|
||||||
const int varIndex = tok->strAt(1) == "(" ? 2 :
|
const int varIndex = tok->strAt(1) == "(" ? 2 :
|
||||||
tok->strAt(3) == "(" ? 4 : 1;
|
tok->strAt(3) == "(" ? 4 : 1;
|
||||||
const unsigned int var1 = tok->tokAt(varIndex)->varId();
|
const int var1 = tok->tokAt(varIndex)->varId();
|
||||||
const unsigned int var2 = tok->tokAt(varIndex + 2)->varId();
|
const int var2 = tok->tokAt(varIndex + 2)->varId();
|
||||||
const std::map<unsigned int, bool>::const_iterator alloc1 = inconclusive.find(var1);
|
const std::map<int, bool>::const_iterator alloc1 = inconclusive.find(var1);
|
||||||
const std::map<unsigned int, bool>::const_iterator alloc2 = inconclusive.find(var2);
|
const std::map<int, bool>::const_iterator alloc2 = inconclusive.find(var2);
|
||||||
if (alloc1 != inconclusive.end()) {
|
if (alloc1 != inconclusive.end()) {
|
||||||
invalidFreeError(tok, allocation[var1], alloc1->second);
|
invalidFreeError(tok, allocation[var1], alloc1->second);
|
||||||
} else if (alloc2 != inconclusive.end()) {
|
} else if (alloc2 != inconclusive.end()) {
|
||||||
|
@ -2010,8 +2010,8 @@ void CheckOther::checkComparisonFunctionIsAlwaysTrueOrFalse()
|
||||||
for (const Scope * scope : symbolDatabase->functionScopes) {
|
for (const Scope * scope : symbolDatabase->functionScopes) {
|
||||||
for (const Token* tok = scope->bodyStart->next(); tok != scope->bodyEnd; tok = tok->next()) {
|
for (const Token* tok = scope->bodyStart->next(); tok != scope->bodyEnd; tok = tok->next()) {
|
||||||
if (tok->isName() && Token::Match(tok, "isgreater|isless|islessgreater|isgreaterequal|islessequal ( %var% , %var% )")) {
|
if (tok->isName() && Token::Match(tok, "isgreater|isless|islessgreater|isgreaterequal|islessequal ( %var% , %var% )")) {
|
||||||
const unsigned int varidLeft = tok->tokAt(2)->varId();// get the left varid
|
const int varidLeft = tok->tokAt(2)->varId();// get the left varid
|
||||||
const unsigned int varidRight = tok->tokAt(4)->varId();// get the right varid
|
const int varidRight = tok->tokAt(4)->varId();// get the right varid
|
||||||
// compare varids: if they are not zero but equal
|
// compare varids: if they are not zero but equal
|
||||||
// --> the comparison function is called with the same variables
|
// --> the comparison function is called with the same variables
|
||||||
if (varidLeft == varidRight) {
|
if (varidLeft == varidRight) {
|
||||||
|
@ -2122,7 +2122,7 @@ static bool constructorTakesReference(const Scope * const classScope)
|
||||||
{
|
{
|
||||||
for (const Function &constructor : classScope->functionList) {
|
for (const Function &constructor : classScope->functionList) {
|
||||||
if (constructor.isConstructor()) {
|
if (constructor.isConstructor()) {
|
||||||
for (std::size_t argnr = 0U; argnr < constructor.argCount(); argnr++) {
|
for (int argnr = 0U; argnr < constructor.argCount(); argnr++) {
|
||||||
const Variable * const argVar = constructor.getArgumentVar(argnr);
|
const Variable * const argVar = constructor.getArgumentVar(argnr);
|
||||||
if (argVar && argVar->isReference()) {
|
if (argVar && argVar->isReference()) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -2263,7 +2263,7 @@ void CheckOther::checkIncompleteArrayFill()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (MathLib::toLongNumber(tok->linkAt(1)->strAt(-1)) == var->dimension(0)) {
|
if (MathLib::toLongNumber(tok->linkAt(1)->strAt(-1)) == var->dimension(0)) {
|
||||||
unsigned int size = mTokenizer->sizeOfType(var->typeStartToken());
|
int size = mTokenizer->sizeOfType(var->typeStartToken());
|
||||||
if (size == 0 && var->valueType()->pointer)
|
if (size == 0 && var->valueType()->pointer)
|
||||||
size = mSettings->sizeof_pointer;
|
size = mSettings->sizeof_pointer;
|
||||||
if ((size != 1 && size != 100 && size != 0) || var->isPointer()) {
|
if ((size != 1 && size != 100 && size != 0) || var->isPointer()) {
|
||||||
|
@ -2309,7 +2309,7 @@ void CheckOther::checkVarFuncNullUB()
|
||||||
if (Token::Match(tok,"[(,] NULL [,)]")) {
|
if (Token::Match(tok,"[(,] NULL [,)]")) {
|
||||||
// Locate function name in this function call.
|
// Locate function name in this function call.
|
||||||
const Token *ftok = tok;
|
const Token *ftok = tok;
|
||||||
std::size_t argnr = 1;
|
int argnr = 1;
|
||||||
while (ftok && ftok->str() != "(") {
|
while (ftok && ftok->str() != "(") {
|
||||||
if (ftok->str() == ")")
|
if (ftok->str() == ")")
|
||||||
ftok = ftok->link();
|
ftok = ftok->link();
|
||||||
|
@ -2677,7 +2677,7 @@ void CheckOther::checkFuncArgNamesDifferent()
|
||||||
std::vector<const Token *> declarations(function->argCount());
|
std::vector<const Token *> declarations(function->argCount());
|
||||||
std::vector<const Token *> definitions(function->argCount());
|
std::vector<const Token *> definitions(function->argCount());
|
||||||
const Token * decl = function->argDef->next();
|
const Token * decl = function->argDef->next();
|
||||||
for (std::size_t j = 0; j < function->argCount(); ++j) {
|
for (int j = 0; j < function->argCount(); ++j) {
|
||||||
declarations[j] = nullptr;
|
declarations[j] = nullptr;
|
||||||
definitions[j] = nullptr;
|
definitions[j] = nullptr;
|
||||||
// get the definition
|
// get the definition
|
||||||
|
@ -2707,11 +2707,11 @@ void CheckOther::checkFuncArgNamesDifferent()
|
||||||
// check for different argument order
|
// check for different argument order
|
||||||
if (warning) {
|
if (warning) {
|
||||||
bool order_different = false;
|
bool order_different = false;
|
||||||
for (std::size_t j = 0; j < function->argCount(); ++j) {
|
for (int j = 0; j < function->argCount(); ++j) {
|
||||||
if (!declarations[j] || !definitions[j] || declarations[j]->str() == definitions[j]->str())
|
if (!declarations[j] || !definitions[j] || declarations[j]->str() == definitions[j]->str())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (std::size_t k = 0; k < function->argCount(); ++k) {
|
for (int k = 0; k < function->argCount(); ++k) {
|
||||||
if (j != k && definitions[k] && declarations[j]->str() == definitions[k]->str()) {
|
if (j != k && definitions[k] && declarations[j]->str() == definitions[k]->str()) {
|
||||||
order_different = true;
|
order_different = true;
|
||||||
break;
|
break;
|
||||||
|
@ -2725,7 +2725,7 @@ void CheckOther::checkFuncArgNamesDifferent()
|
||||||
}
|
}
|
||||||
// check for different argument names
|
// check for different argument names
|
||||||
if (style && inconclusive) {
|
if (style && inconclusive) {
|
||||||
for (std::size_t j = 0; j < function->argCount(); ++j) {
|
for (int j = 0; j < function->argCount(); ++j) {
|
||||||
if (declarations[j] && definitions[j] && declarations[j]->str() != definitions[j]->str())
|
if (declarations[j] && definitions[j] && declarations[j]->str() != definitions[j]->str())
|
||||||
funcArgNamesDifferent(function->name(), j, declarations[j], definitions[j]);
|
funcArgNamesDifferent(function->name(), j, declarations[j], definitions[j]);
|
||||||
}
|
}
|
||||||
|
@ -2733,7 +2733,7 @@ void CheckOther::checkFuncArgNamesDifferent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckOther::funcArgNamesDifferent(const std::string & functionName, size_t index,
|
void CheckOther::funcArgNamesDifferent(const std::string & functionName, nonneg int index,
|
||||||
const Token* declaration, const Token* definition)
|
const Token* declaration, const Token* definition)
|
||||||
{
|
{
|
||||||
std::list<const Token *> tokens = { declaration,definition };
|
std::list<const Token *> tokens = { declaration,definition };
|
||||||
|
@ -2754,14 +2754,14 @@ void CheckOther::funcArgOrderDifferent(const std::string & functionName,
|
||||||
definitions.size() ? definitions[0] ? definitions[0] : definition : nullptr
|
definitions.size() ? definitions[0] ? definitions[0] : definition : nullptr
|
||||||
};
|
};
|
||||||
std::string msg = "$symbol:" + functionName + "\nFunction '$symbol' argument order different: declaration '";
|
std::string msg = "$symbol:" + functionName + "\nFunction '$symbol' argument order different: declaration '";
|
||||||
for (std::size_t i = 0; i < declarations.size(); ++i) {
|
for (int i = 0; i < declarations.size(); ++i) {
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
msg += ", ";
|
msg += ", ";
|
||||||
if (declarations[i])
|
if (declarations[i])
|
||||||
msg += declarations[i]->str();
|
msg += declarations[i]->str();
|
||||||
}
|
}
|
||||||
msg += "' definition '";
|
msg += "' definition '";
|
||||||
for (std::size_t i = 0; i < definitions.size(); ++i) {
|
for (int i = 0; i < definitions.size(); ++i) {
|
||||||
if (i != 0)
|
if (i != 0)
|
||||||
msg += ", ";
|
msg += ", ";
|
||||||
if (definitions[i])
|
if (definitions[i])
|
||||||
|
|
|
@ -257,7 +257,7 @@ private:
|
||||||
void unknownEvaluationOrder(const Token* tok);
|
void unknownEvaluationOrder(const Token* tok);
|
||||||
static bool isMovedParameterAllowedForInconclusiveFunction(const Token * tok);
|
static bool isMovedParameterAllowedForInconclusiveFunction(const Token * tok);
|
||||||
void accessMovedError(const Token *tok, const std::string &varname, const ValueFlow::Value *value, bool inconclusive);
|
void accessMovedError(const Token *tok, const std::string &varname, const ValueFlow::Value *value, bool inconclusive);
|
||||||
void funcArgNamesDifferent(const std::string & functionName, size_t index, const Token* declaration, const Token* definition);
|
void funcArgNamesDifferent(const std::string & functionName, nonneg int index, const Token* declaration, const Token* definition);
|
||||||
void funcArgOrderDifferent(const std::string & functionName, const Token * declaration, const Token * definition, const std::vector<const Token*> & declarations, const std::vector<const Token*> & definitions);
|
void funcArgOrderDifferent(const std::string & functionName, const Token * declaration, const Token * definition, const std::vector<const Token*> & declarations, const std::vector<const Token*> & definitions);
|
||||||
void shadowError(const Token *var, const Token *shadowed, bool shadowVar);
|
void shadowError(const Token *var, const Token *shadowed, bool shadowVar);
|
||||||
void constArgumentError(const Token *tok, const Token *ftok, const ValueFlow::Value *value);
|
void constArgumentError(const Token *tok, const Token *ftok, const ValueFlow::Value *value);
|
||||||
|
|
Loading…
Reference in New Issue