Skip to content

Commit d126b72

Browse files
committed
ValueFlow: avoid unnecessary ValuePtr and Value copies
1 parent dac6671 commit d126b72

5 files changed

Lines changed: 26 additions & 26 deletions

File tree

lib/forwardanalyzer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ struct OnExit {
5050
struct ForwardTraversal {
5151
enum class Progress { Continue, Break, Skip };
5252
enum class Terminate { None, Bail, Inconclusive };
53-
ForwardTraversal(const ValuePtr<Analyzer>& analyzer, const Settings& settings)
54-
: analyzer(analyzer), settings(settings)
53+
ForwardTraversal(ValuePtr<Analyzer> analyzer, const Settings& settings)
54+
: analyzer(std::move(analyzer)), settings(settings)
5555
{}
5656
ValuePtr<Analyzer> analyzer;
5757
const Settings& settings;
@@ -891,22 +891,22 @@ struct ForwardTraversal {
891891
}
892892
};
893893

894-
Analyzer::Result valueFlowGenericForward(Token* start, const Token* end, const ValuePtr<Analyzer>& a, const Settings& settings)
894+
Analyzer::Result valueFlowGenericForward(Token* start, const Token* end, ValuePtr<Analyzer>& a, const Settings settings)
895895
{
896896
if (a->invalid())
897897
return Analyzer::Result{Analyzer::Action::None, Analyzer::Terminate::Bail};
898-
ForwardTraversal ft{a, settings};
898+
ForwardTraversal ft{std::move(a), settings};
899899
ft.updateRange(start, end);
900900
return Analyzer::Result{ ft.actions, ft.terminate };
901901
}
902902

903-
Analyzer::Result valueFlowGenericForward(Token* start, const ValuePtr<Analyzer>& a, const Settings& settings)
903+
Analyzer::Result valueFlowGenericForward(Token* start, ValuePtr<Analyzer> a, const Settings& settings)
904904
{
905905
if (Settings::terminated())
906906
throw TerminateException();
907907
if (a->invalid())
908908
return Analyzer::Result{Analyzer::Action::None, Analyzer::Terminate::Bail};
909-
ForwardTraversal ft{a, settings};
909+
ForwardTraversal ft{std::move(a), settings};
910910
ft.updateRecursive(start);
911911
return Analyzer::Result{ ft.actions, ft.terminate };
912912
}

lib/forwardanalyzer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@
2020
#define forwardanalyzerH
2121

2222
#include "analyzer.h"
23+
#include "valueptr.h"
2324

2425
class Settings;
2526
class Token;
26-
template<class T> class ValuePtr;
2727

2828
Analyzer::Result valueFlowGenericForward(Token* start,
2929
const Token* end,
30-
const ValuePtr<Analyzer>& a,
30+
ValuePtr<Analyzer> a,
3131
const Settings& settings);
3232

33-
Analyzer::Result valueFlowGenericForward(Token* start, const ValuePtr<Analyzer>& a, const Settings& settings);
33+
Analyzer::Result valueFlowGenericForward(Token* start, ValuePtr<Analyzer> a, const Settings& settings);
3434

3535
#endif

lib/reverseanalyzer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
#include <vector>
3737

3838
struct ReverseTraversal {
39-
ReverseTraversal(const ValuePtr<Analyzer>& analyzer, const Settings& settings)
40-
: analyzer(analyzer), settings(settings)
39+
ReverseTraversal(ValuePtr<Analyzer> analyzer, const Settings& settings)
40+
: analyzer(std::move(analyzer)), settings(settings)
4141
{}
4242
ValuePtr<Analyzer> analyzer;
4343
const Settings& settings;
@@ -237,7 +237,7 @@ struct ReverseTraversal {
237237
if (a) {
238238
valueFlowGenericForward(nextAfterAstRightmostLeaf(assignTok->astOperand2()),
239239
assignTok->astOperand2()->scope()->bodyEnd,
240-
a,
240+
std::move(a),
241241
settings);
242242
}
243243
// Assignment to
@@ -251,7 +251,7 @@ struct ReverseTraversal {
251251
assignTok->astOperand2()->scope()->bodyEnd,
252252
a,
253253
settings);
254-
valueFlowGenericReverse(assignTok->astOperand1()->previous(), end, a, settings);
254+
valueFlowGenericReverse(assignTok->astOperand1()->previous(), end, std::move(a), settings);
255255
}
256256
}
257257
}
@@ -387,10 +387,10 @@ struct ReverseTraversal {
387387
}
388388
};
389389

390-
void valueFlowGenericReverse(Token* start, const Token* end, const ValuePtr<Analyzer>& a, const Settings& settings)
390+
void valueFlowGenericReverse(Token* start, const Token* end, ValuePtr<Analyzer> a, const Settings& settings)
391391
{
392392
if (a->invalid())
393393
return;
394-
ReverseTraversal rt{a, settings};
394+
ReverseTraversal rt{std::move(a), settings};
395395
rt.traverse(start, end);
396396
}

lib/reverseanalyzer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
#ifndef reverseanalyzerH
2020
#define reverseanalyzerH
2121

22+
#include "valueptr.h"
23+
2224
struct Analyzer;
2325
class Settings;
2426
class Token;
25-
template<class T>
26-
class ValuePtr;
2727

28-
void valueFlowGenericReverse(Token* start, const Token* end, const ValuePtr<Analyzer>& a, const Settings& settings);
28+
void valueFlowGenericReverse(Token* start, const Token* end, ValuePtr<Analyzer> a, const Settings& settings);
2929

3030
#endif

lib/valueflow.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5274,11 +5274,11 @@ static void valueFlowConditionExpressions(TokenList &tokenlist, const SymbolData
52745274
if (is1) {
52755275
const bool isBool = astIsBool(condTok2) || Token::Match(condTok2, "%comp%|%oror%|&&");
52765276
SameExpressionAnalyzer a1(condTok2, makeConditionValue(1, condTok2, /*assume*/ true, !isBool), tokenlist, &settings); // don't set '1' for non-boolean expressions
5277-
valueFlowGenericForward(startTok, startTok->link(), a1, settings);
5277+
valueFlowGenericForward(startTok, startTok->link(), std::move(a1), settings);
52785278
}
52795279

52805280
OppositeExpressionAnalyzer a2(true, condTok2, makeConditionValue(0, condTok2, true), tokenlist, &settings);
5281-
valueFlowGenericForward(startTok, startTok->link(), a2, settings);
5281+
valueFlowGenericForward(startTok, startTok->link(), std::move(a2), settings);
52825282
}
52835283
}
52845284

@@ -5289,11 +5289,11 @@ static void valueFlowConditionExpressions(TokenList &tokenlist, const SymbolData
52895289
startTok = startTok->link()->tokAt(2);
52905290
for (const Token* condTok2:conds) {
52915291
SameExpressionAnalyzer a1(condTok2, makeConditionValue(0, condTok2, false), tokenlist, &settings);
5292-
valueFlowGenericForward(startTok, startTok->link(), a1, settings);
5292+
valueFlowGenericForward(startTok, startTok->link(), std::move(a1), settings);
52935293

52945294
if (is1) {
52955295
OppositeExpressionAnalyzer a2(true, condTok2, makeConditionValue(1, condTok2, false), tokenlist, &settings);
5296-
valueFlowGenericForward(startTok, startTok->link(), a2, settings);
5296+
valueFlowGenericForward(startTok, startTok->link(), std::move(a2), settings);
52975297
}
52985298
}
52995299
}
@@ -5309,11 +5309,11 @@ static void valueFlowConditionExpressions(TokenList &tokenlist, const SymbolData
53095309
}
53105310
for (const Token* condTok2:conds) {
53115311
SameExpressionAnalyzer a1(condTok2, makeConditionValue(0, condTok2, false), tokenlist, &settings);
5312-
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, a1, settings);
5312+
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, std::move(a1), settings);
53135313

53145314
if (is1) {
53155315
OppositeExpressionAnalyzer a2(true, condTok2, makeConditionValue(1, condTok2, false), tokenlist, &settings);
5316-
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, a2, settings);
5316+
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, std::move(a2), settings);
53175317
}
53185318
}
53195319
}
@@ -7389,7 +7389,7 @@ static void valueFlowInjectParameter(TokenList& tokenlist,
73897389
{
73907390
const bool r = productParams(&settings, vars, [&](const std::unordered_map<const Variable*, ValueFlow::Value>& arg) {
73917391
MultiValueFlowAnalyzer a(arg, tokenlist, &settings);
7392-
valueFlowGenericForward(const_cast<Token*>(functionScope->bodyStart), functionScope->bodyEnd, a, settings);
7392+
valueFlowGenericForward(const_cast<Token*>(functionScope->bodyStart), functionScope->bodyEnd, std::move(a), settings);
73937393
});
73947394
if (!r) {
73957395
std::string fname = "<unknown>";
@@ -8014,7 +8014,7 @@ static void valueFlowUninit(TokenList& tokenlist, const Settings* settings)
80148014
continue;
80158015
}
80168016
MemberExpressionAnalyzer analyzer(memVar.nameToken()->str(), tok, uninitValue, tokenlist, settings);
8017-
valueFlowGenericForward(start, tok->scope()->bodyEnd, analyzer, *settings);
8017+
valueFlowGenericForward(start, tok->scope()->bodyEnd, std::move(analyzer), *settings);
80188018

80198019
for (auto&& p : *analyzer.partialReads) {
80208020
Token* tok2 = p.first;

0 commit comments

Comments
 (0)