Skip to content

Commit b43db41

Browse files
committed
ValueFlow: avoid unnecessary ValuePtr and Value copies
1 parent f9c67ef commit b43db41

File tree

5 files changed

+29
-29
lines changed

5 files changed

+29
-29
lines changed

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, Escape, Modified, Inconclusive, Conditional };
53-
ForwardTraversal(const ValuePtr<Analyzer>& analyzer, const Settings* settings)
54-
: analyzer(analyzer), settings(settings), actions(Analyzer::Action::None), analyzeOnly(false), analyzeTerminate(false)
53+
ForwardTraversal(ValuePtr<Analyzer> analyzer, const Settings* settings)
54+
: analyzer(std::move(analyzer)), settings(settings), actions(Analyzer::Action::None), analyzeOnly(false), analyzeTerminate(false)
5555
{}
5656
ValuePtr<Analyzer> analyzer;
5757
const Settings* settings;
@@ -896,18 +896,18 @@ struct ForwardTraversal {
896896
}
897897
};
898898

899-
Analyzer::Result valueFlowGenericForward(Token* start, const Token* end, const ValuePtr<Analyzer>& a, const Settings* settings)
899+
Analyzer::Result valueFlowGenericForward(Token* start, const Token* end, ValuePtr<Analyzer> a, const Settings* settings)
900900
{
901-
ForwardTraversal ft{a, settings};
901+
ForwardTraversal ft{std::move(a), settings};
902902
ft.updateRange(start, end);
903903
return Analyzer::Result{ ft.actions, ft.terminate };
904904
}
905905

906-
Analyzer::Result valueFlowGenericForward(Token* start, const ValuePtr<Analyzer>& a, const Settings* settings)
906+
Analyzer::Result valueFlowGenericForward(Token* start, ValuePtr<Analyzer> a, const Settings* settings)
907907
{
908908
if (Settings::terminated())
909909
throw TerminateException();
910-
ForwardTraversal ft{a, settings};
910+
ForwardTraversal ft{std::move(a), settings};
911911
ft.updateRecursive(start);
912912
return Analyzer::Result{ ft.actions, ft.terminate };
913913
}

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: 8 additions & 8 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;
@@ -238,7 +238,7 @@ struct ReverseTraversal {
238238
if (a) {
239239
valueFlowGenericForward(nextAfterAstRightmostLeaf(assignTok->astOperand2()),
240240
assignTok->astOperand2()->scope()->bodyEnd,
241-
a,
241+
std::move(a),
242242
settings);
243243
}
244244
// Assignment to
@@ -252,7 +252,7 @@ struct ReverseTraversal {
252252
assignTok->astOperand2()->scope()->bodyEnd,
253253
a,
254254
settings);
255-
valueFlowGenericReverse(assignTok->astOperand1()->previous(), end, a, settings);
255+
valueFlowGenericReverse(assignTok->astOperand1()->previous(), end, std::move(a), settings);
256256
}
257257
}
258258
}
@@ -388,14 +388,14 @@ struct ReverseTraversal {
388388
}
389389
};
390390

391-
void valueFlowGenericReverse(Token* start, const ValuePtr<Analyzer>& a, const Settings* settings)
391+
void valueFlowGenericReverse(Token* start, ValuePtr<Analyzer> a, const Settings* settings)
392392
{
393-
ReverseTraversal rt{a, settings};
393+
ReverseTraversal rt{std::move(a), settings};
394394
rt.traverse(start);
395395
}
396396

397-
void valueFlowGenericReverse(Token* start, const Token* end, const ValuePtr<Analyzer>& a, const Settings* settings)
397+
void valueFlowGenericReverse(Token* start, const Token* end, ValuePtr<Analyzer> a, const Settings* settings)
398398
{
399-
ReverseTraversal rt{a, settings};
399+
ReverseTraversal rt{std::move(a), settings};
400400
rt.traverse(start, end);
401401
}

lib/reverseanalyzer.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
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 ValuePtr<Analyzer>& a, const Settings* settings);
29-
void valueFlowGenericReverse(Token* start, const Token* end, const ValuePtr<Analyzer>& a, const Settings* settings);
28+
void valueFlowGenericReverse(Token* start, ValuePtr<Analyzer> a, const Settings* settings);
29+
void valueFlowGenericReverse(Token* start, const Token* end, ValuePtr<Analyzer> a, const Settings* settings);
3030

3131
#endif

lib/valueflow.cpp

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

51455145
OppositeExpressionAnalyzer a2(true, condTok2, makeConditionValue(0, condTok2, true), tokenlist);
5146-
valueFlowGenericForward(startTok, startTok->link(), a2, settings);
5146+
valueFlowGenericForward(startTok, startTok->link(), std::move(a2), settings);
51475147
}
51485148
}
51495149

@@ -5154,11 +5154,11 @@ static void valueFlowConditionExpressions(TokenList *tokenlist, SymbolDatabase*
51545154
startTok = startTok->link()->tokAt(2);
51555155
for (const Token* condTok2:conds) {
51565156
SameExpressionAnalyzer a1(condTok2, makeConditionValue(0, condTok2, false), tokenlist);
5157-
valueFlowGenericForward(startTok, startTok->link(), a1, settings);
5157+
valueFlowGenericForward(startTok, startTok->link(), std::move(a1), settings);
51585158

51595159
if (is1) {
51605160
OppositeExpressionAnalyzer a2(true, condTok2, makeConditionValue(1, condTok2, false), tokenlist);
5161-
valueFlowGenericForward(startTok, startTok->link(), a2, settings);
5161+
valueFlowGenericForward(startTok, startTok->link(), std::move(a2), settings);
51625162
}
51635163
}
51645164
}
@@ -5174,11 +5174,11 @@ static void valueFlowConditionExpressions(TokenList *tokenlist, SymbolDatabase*
51745174
}
51755175
for (const Token* condTok2:conds) {
51765176
SameExpressionAnalyzer a1(condTok2, makeConditionValue(0, condTok2, false), tokenlist);
5177-
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, a1, settings);
5177+
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, std::move(a1), settings);
51785178

51795179
if (is1) {
51805180
OppositeExpressionAnalyzer a2(true, condTok2, makeConditionValue(1, condTok2, false), tokenlist);
5181-
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, a2, settings);
5181+
valueFlowGenericForward(startTok->link()->next(), scope2->bodyEnd, std::move(a2), settings);
51825182
}
51835183
}
51845184
}
@@ -7208,7 +7208,7 @@ static void valueFlowInjectParameter(TokenList* tokenlist,
72087208
{
72097209
const bool r = productParams(vars, [&](const std::unordered_map<const Variable*, ValueFlow::Value>& arg) {
72107210
MultiValueFlowAnalyzer a(arg, tokenlist, symboldatabase);
7211-
valueFlowGenericForward(const_cast<Token*>(functionScope->bodyStart), functionScope->bodyEnd, a, settings);
7211+
valueFlowGenericForward(const_cast<Token*>(functionScope->bodyStart), functionScope->bodyEnd, std::move(a), settings);
72127212
});
72137213
if (!r) {
72147214
std::string fname = "<unknown>";
@@ -7655,7 +7655,7 @@ static void valueFlowUninit(TokenList* tokenlist, SymbolDatabase* /*symbolDataba
76557655
continue;
76567656
}
76577657
MemberExpressionAnalyzer analyzer(memVar.nameToken()->str(), tok, uninitValue, tokenlist);
7658-
valueFlowGenericForward(tok->next(), tok->scope()->bodyEnd, analyzer, settings);
7658+
valueFlowGenericForward(tok->next(), tok->scope()->bodyEnd, std::move(analyzer), settings);
76597659

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

0 commit comments

Comments
 (0)