Skip to content

Commit 809d0ab

Browse files
committed
valueflow.cpp: avoid unnecessary copies with valueFlowForwardConst() [skip ci]
1 parent 5f66350 commit 809d0ab

1 file changed

Lines changed: 9 additions & 19 deletions

File tree

lib/valueflow.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3812,16 +3812,15 @@ template<class ContainerOfValue>
38123812
static void valueFlowForwardConst(Token* start,
38133813
const Token* end,
38143814
const Variable* var,
3815-
const ContainerOfValue& values,
3816-
const Settings& settings,
3817-
int /*unused*/ = 0)
3815+
ContainerOfValue values,
3816+
const Settings& settings)
38183817
{
38193818
if (!precedes(start, end))
38203819
throw InternalError(var->nameToken(), "valueFlowForwardConst: start token does not precede the end token.");
38213820
for (Token* tok = start; tok != end; tok = tok->next()) {
38223821
if (tok->varId() == var->declarationId()) {
3823-
for (const ValueFlow::Value& value : values)
3824-
setTokenValue(tok, value, settings);
3822+
for (ValueFlow::Value& value : values)
3823+
setTokenValue(tok, std::move(value), settings);
38253824
} else {
38263825
[&] {
38273826
// Follow references
@@ -3830,7 +3829,7 @@ static void valueFlowForwardConst(Token* start,
38303829
return ref.token->varId() == var->declarationId();
38313830
});
38323831
if (it != refs.end()) {
3833-
for (ValueFlow::Value value : values) {
3832+
for (ValueFlow::Value& value : values) {
38343833
if (refs.size() > 1)
38353834
value.setInconclusive();
38363835
value.errorPath.insert(value.errorPath.end(), it->errors.cbegin(), it->errors.cend());
@@ -3846,7 +3845,7 @@ static void valueFlowForwardConst(Token* start,
38463845
continue;
38473846
if (v.tokvalue->varId() != var->declarationId())
38483847
continue;
3849-
for (ValueFlow::Value value : values) {
3848+
for (ValueFlow::Value& value : values) {
38503849
if (!v.isKnown() && value.isImpossible())
38513850
continue;
38523851
if (v.intvalue != 0) {
@@ -3866,15 +3865,6 @@ static void valueFlowForwardConst(Token* start,
38663865
}
38673866
}
38683867

3869-
static void valueFlowForwardConst(Token* start,
3870-
const Token* end,
3871-
const Variable* var,
3872-
const std::initializer_list<ValueFlow::Value>& values,
3873-
const Settings& settings)
3874-
{
3875-
valueFlowForwardConst(start, end, var, values, settings, 0);
3876-
}
3877-
38783868
static ValueFlow::Value::Bound findVarBound(const Variable* var,
38793869
const Token* start,
38803870
const Token* end,
@@ -4002,7 +3992,7 @@ static void valueFlowForwardAssign(Token* const tok,
40023992
});
40033993
std::list<ValueFlow::Value> constValues;
40043994
constValues.splice(constValues.end(), values, it, values.end());
4005-
valueFlowForwardConst(nextExpression, endOfVarScope, expr->variable(), constValues, settings);
3995+
valueFlowForwardConst(nextExpression, endOfVarScope, expr->variable(), std::move(constValues), settings);
40063996
}
40073997
if (isInitialVarAssign(expr)) {
40083998
// Check if variable is only incremented or decremented
@@ -4018,7 +4008,7 @@ static void valueFlowForwardAssign(Token* const tok,
40184008
value.bound = b;
40194009
value.invertRange();
40204010
value.setImpossible();
4021-
valueFlowForwardConst(nextExpression, endOfVarScope, expr->variable(), {std::move(value)}, settings);
4011+
valueFlowForwardConst(nextExpression, endOfVarScope, expr->variable(), std::list<ValueFlow::Value>{std::move(value)}, settings);
40224012
}
40234013
}
40244014
}
@@ -6599,7 +6589,7 @@ static void valueFlowContainerSetTokValue(const TokenList& tokenlist, ErrorLogge
65996589
value.setKnown();
66006590
Token* start = initList->link() ? initList->link() : initList->next();
66016591
if (tok->variable() && tok->variable()->isConst()) {
6602-
valueFlowForwardConst(start, tok->variable()->scope()->bodyEnd, tok->variable(), {std::move(value)}, settings);
6592+
valueFlowForwardConst(start, tok->variable()->scope()->bodyEnd, tok->variable(), std::list<ValueFlow::Value>{std::move(value)}, settings);
66036593
} else {
66046594
valueFlowForward(start, tok, std::move(value), tokenlist, errorLogger, settings);
66056595
}

0 commit comments

Comments
 (0)