avoid some unnecessary object creations and copies (#4493)

This commit is contained in:
Oliver Stöneberg 2022-09-29 21:47:17 +02:00 committed by GitHub
parent 0481edf9c3
commit eeb6db05f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 18 additions and 23 deletions

View File

@ -341,10 +341,7 @@ void CheckUnusedFunctions::unusedFunctionError(ErrorLogger * const errorLogger,
{ {
std::list<ErrorMessage::FileLocation> locationList; std::list<ErrorMessage::FileLocation> locationList;
if (!filename.empty()) { if (!filename.empty()) {
ErrorMessage::FileLocation fileLoc; locationList.emplace_back(filename, lineNumber);
fileLoc.setfile(filename);
fileLoc.line = lineNumber;
locationList.push_back(std::move(fileLoc));
} }
const ErrorMessage errmsg(locationList, emptyString, Severity::style, "$symbol:" + funcname + "\nThe function '$symbol' is never used.", "unusedFunction", CWE561, Certainty::normal); const ErrorMessage errmsg(locationList, emptyString, Severity::style, "$symbol:" + funcname + "\nThe function '$symbol' is never used.", "unusedFunction", CWE561, Certainty::normal);

View File

@ -1476,9 +1476,7 @@ void CppCheck::tooManyConfigsError(const std::string &file, const int numberOfCo
std::list<ErrorMessage::FileLocation> loclist; std::list<ErrorMessage::FileLocation> loclist;
if (!file.empty()) { if (!file.empty()) {
ErrorMessage::FileLocation location; loclist.emplace_back(file);
location.setfile(file);
loclist.push_back(std::move(location));
} }
std::ostringstream msg; std::ostringstream msg;
@ -1514,9 +1512,7 @@ void CppCheck::purgedConfigurationMessage(const std::string &file, const std::st
std::list<ErrorMessage::FileLocation> loclist; std::list<ErrorMessage::FileLocation> loclist;
if (!file.empty()) { if (!file.empty()) {
ErrorMessage::FileLocation location; loclist.emplace_back(file);
location.setfile(file);
loclist.push_back(std::move(location));
} }
ErrorMessage errmsg(loclist, ErrorMessage errmsg(loclist,

View File

@ -57,7 +57,7 @@ public:
FileLocation() FileLocation()
: fileIndex(0), line(0), column(0) {} : fileIndex(0), line(0), column(0) {}
FileLocation(const std::string &file, int line, unsigned int column) explicit FileLocation(const std::string &file, int line = 0, unsigned int column = 0)
: fileIndex(0), line(line), column(column), mOrigFileName(file), mFileName(file) {} : fileIndex(0), line(line), column(column), mOrigFileName(file), mFileName(file) {}
FileLocation(const std::string &file, std::string info, int line, unsigned int column) FileLocation(const std::string &file, std::string info, int line, unsigned int column)

View File

@ -301,7 +301,7 @@ struct ForwardTraversal {
std::vector<ForwardTraversal> tryForkScope(Token* endBlock, bool isModified = false) { std::vector<ForwardTraversal> tryForkScope(Token* endBlock, bool isModified = false) {
if (analyzer->updateScope(endBlock, isModified)) { if (analyzer->updateScope(endBlock, isModified)) {
ForwardTraversal ft = fork(); ForwardTraversal ft = fork();
return {ft}; return {std::move(ft)};
} }
return std::vector<ForwardTraversal> {}; return std::vector<ForwardTraversal> {};
} }

View File

@ -1645,9 +1645,9 @@ const Library::Container * getLibraryContainer(const Token * tok)
return tok->valueType()->container; return tok->valueType()->container;
} }
Library::TypeCheck Library::getTypeCheck(const std::string &check, const std::string &typeName) const Library::TypeCheck Library::getTypeCheck(std::string check, std::string typeName) const
{ {
auto it = mTypeChecks.find(std::pair<std::string, std::string>(check, typeName)); auto it = mTypeChecks.find(std::pair<std::string, std::string>(std::move(check), std::move(typeName)));
return it == mTypeChecks.end() ? TypeCheck::def : it->second; return it == mTypeChecks.end() ? TypeCheck::def : it->second;
} }

View File

@ -555,7 +555,7 @@ public:
/** Suppress/check a type */ /** Suppress/check a type */
enum class TypeCheck { def, check, suppress }; enum class TypeCheck { def, check, suppress };
TypeCheck getTypeCheck(const std::string &check, const std::string &typeName) const; TypeCheck getTypeCheck(std::string check, std::string typeName) const;
private: private:
// load a <function> xml node // load a <function> xml node

View File

@ -3034,7 +3034,7 @@ Function* SymbolDatabase::addGlobalFunction(Scope*& scope, const Token*& tok, co
Function* SymbolDatabase::addGlobalFunctionDecl(Scope*& scope, const Token *tok, const Token *argStart, const Token* funcStart) Function* SymbolDatabase::addGlobalFunctionDecl(Scope*& scope, const Token *tok, const Token *argStart, const Token* funcStart)
{ {
Function function(mTokenizer, tok, scope, funcStart, argStart); Function function(mTokenizer, tok, scope, funcStart, argStart);
scope->addFunction(function); scope->addFunction(std::move(function));
return &scope->functionList.back(); return &scope->functionList.back();
} }

View File

@ -6389,7 +6389,7 @@ struct SimpleConditionHandler : ConditionHandler {
cond.false_values.emplace_back(tok, 0LL); cond.false_values.emplace_back(tok, 0LL);
cond.vartok = vartok; cond.vartok = vartok;
return {cond}; return {std::move(cond)};
} }
}; };
@ -6574,8 +6574,8 @@ struct SymbolicConditionHandler : SimpleConditionHandler {
setSymbolic(false_value, valuetok); setSymbolic(false_value, valuetok);
Condition cond; Condition cond;
cond.true_values = {true_value}; cond.true_values = {std::move(true_value)};
cond.false_values = {false_value}; cond.false_values = {std::move(false_value)};
cond.vartok = vartok; cond.vartok = vartok;
cond.inverted = inverted; cond.inverted = inverted;
result.push_back(std::move(cond)); result.push_back(std::move(cond));
@ -7977,7 +7977,7 @@ struct IteratorConditionHandler : SimpleConditionHandler {
cond.false_values = values; cond.false_values = values;
} }
return {cond}; return {std::move(cond)};
} }
}; };
@ -8308,7 +8308,7 @@ struct ContainerConditionHandler : ConditionHandler {
cond.false_values.emplace_back(std::move(value)); cond.false_values.emplace_back(std::move(value));
cond.vartok = vartok; cond.vartok = vartok;
cond.inverted = true; cond.inverted = true;
return {cond}; return {std::move(cond)};
} }
// String compare // String compare
if (Token::Match(tok, "==|!=")) { if (Token::Match(tok, "==|!=")) {
@ -8331,7 +8331,7 @@ struct ContainerConditionHandler : ConditionHandler {
cond.true_values.emplace_back(std::move(value)); cond.true_values.emplace_back(std::move(value));
cond.vartok = vartok; cond.vartok = vartok;
cond.impossible = false; cond.impossible = false;
return {cond}; return {std::move(cond)};
} }
return {}; return {};
} }
@ -8965,6 +8965,7 @@ const ValueFlow::Value* ValueFlow::findValue(const std::list<ValueFlow::Value>&
return ret; return ret;
} }
// TODO: returns a single value at most - no need for std::vector
static std::vector<ValueFlow::Value> isOutOfBoundsImpl(const ValueFlow::Value& size, static std::vector<ValueFlow::Value> isOutOfBoundsImpl(const ValueFlow::Value& size,
const Token* indexTok, const Token* indexTok,
bool condition) bool condition)
@ -8996,9 +8997,10 @@ static std::vector<ValueFlow::Value> isOutOfBoundsImpl(const ValueFlow::Value& s
return {}; return {};
value.intvalue = size.intvalue; value.intvalue = size.intvalue;
value.bound = ValueFlow::Value::Bound::Lower; value.bound = ValueFlow::Value::Bound::Lower;
return {value}; return {std::move(value)};
} }
// TODO: return single value at most - no need for std::vector
std::vector<ValueFlow::Value> ValueFlow::isOutOfBounds(const Value& size, const Token* indexTok, bool possible) std::vector<ValueFlow::Value> ValueFlow::isOutOfBounds(const Value& size, const Token* indexTok, bool possible)
{ {
ValueFlow::Value inBoundsValue = inferCondition("<", indexTok, size.intvalue); ValueFlow::Value inBoundsValue = inferCondition("<", indexTok, size.intvalue);