Skip to content

Commit 4f41804

Browse files
authored
avoid using temporary objects in followAllReferences() (danmar#6697)
1 parent 4df7cb9 commit 4f41804

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

lib/astutils.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,27 +1250,27 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
12501250
return {};
12511251
if (depth < 0) {
12521252
SmallVector<ReferenceToken> refs_result;
1253-
refs_result.push_back({tok, std::move(errors)});
1253+
refs_result.emplace_back(tok, std::move(errors));
12541254
return refs_result;
12551255
}
12561256
const Variable *var = tok->variable();
12571257
if (var && var->declarationId() == tok->varId()) {
12581258
if (var->nameToken() == tok || isStructuredBindingVariable(var)) {
12591259
SmallVector<ReferenceToken> refs_result;
1260-
refs_result.push_back({tok, std::move(errors)});
1260+
refs_result.emplace_back(tok, std::move(errors));
12611261
return refs_result;
12621262
}
12631263
if (var->isReference() || var->isRValueReference()) {
12641264
const Token * const varDeclEndToken = var->declEndToken();
12651265
if (!varDeclEndToken) {
12661266
SmallVector<ReferenceToken> refs_result;
1267-
refs_result.push_back({tok, std::move(errors)});
1267+
refs_result.emplace_back(tok, std::move(errors));
12681268
return refs_result;
12691269
}
12701270
if (var->isArgument()) {
12711271
errors.emplace_back(varDeclEndToken, "Passed to reference.");
12721272
SmallVector<ReferenceToken> refs_result;
1273-
refs_result.push_back({tok, std::move(errors)});
1273+
refs_result.emplace_back(tok, std::move(errors));
12741274
return refs_result;
12751275
}
12761276
if (Token::simpleMatch(varDeclEndToken, "=")) {
@@ -1281,7 +1281,7 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
12811281
if (vartok == tok || (!temporary && isTemporary(vartok, nullptr, true) &&
12821282
(var->isConst() || var->isRValueReference()))) {
12831283
SmallVector<ReferenceToken> refs_result;
1284-
refs_result.push_back({tok, std::move(errors)});
1284+
refs_result.emplace_back(tok, std::move(errors));
12851285
return refs_result;
12861286
}
12871287
if (vartok)
@@ -1299,7 +1299,7 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
12991299

13001300
if (!inconclusive && result.size() != 1) {
13011301
SmallVector<ReferenceToken> refs_result;
1302-
refs_result.push_back({tok, std::move(errors)});
1302+
refs_result.emplace_back(tok, std::move(errors));
13031303
return refs_result;
13041304
}
13051305

@@ -1313,7 +1313,7 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
13131313
const Function *f = tok->previous()->function();
13141314
if (!Function::returnsReference(f)) {
13151315
SmallVector<ReferenceToken> refs_result;
1316-
refs_result.push_back({tok, std::move(errors)});
1316+
refs_result.emplace_back(tok, std::move(errors));
13171317
return refs_result;
13181318
}
13191319
std::set<ReferenceToken, ReferenceTokenLess> result;
@@ -1326,20 +1326,20 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
13261326
const Variable* argvar = rt.token->variable();
13271327
if (!argvar) {
13281328
SmallVector<ReferenceToken> refs_result;
1329-
refs_result.push_back({tok, std::move(errors)});
1329+
refs_result.emplace_back(tok, std::move(errors));
13301330
return refs_result;
13311331
}
13321332
if (argvar->isArgument() && (argvar->isReference() || argvar->isRValueReference())) {
13331333
const int n = getArgumentPos(argvar, f);
13341334
if (n < 0) {
13351335
SmallVector<ReferenceToken> refs_result;
1336-
refs_result.push_back({tok, std::move(errors)});
1336+
refs_result.emplace_back(tok, std::move(errors));
13371337
return refs_result;
13381338
}
13391339
std::vector<const Token*> args = getArguments(tok->previous());
13401340
if (n >= args.size()) {
13411341
SmallVector<ReferenceToken> refs_result;
1342-
refs_result.push_back({tok, std::move(errors)});
1342+
refs_result.emplace_back(tok, std::move(errors));
13431343
return refs_result;
13441344
}
13451345
const Token* argTok = args[n];
@@ -1351,7 +1351,7 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
13511351
result.insert(refs.cbegin(), refs.cend());
13521352
if (!inconclusive && result.size() > 1) {
13531353
SmallVector<ReferenceToken> refs_result;
1354-
refs_result.push_back({tok, std::move(errors)});
1354+
refs_result.emplace_back(tok, std::move(errors));
13551355
return refs_result;
13561356
}
13571357
}
@@ -1364,7 +1364,7 @@ SmallVector<ReferenceToken> followAllReferences(const Token* tok,
13641364
}
13651365
}
13661366
SmallVector<ReferenceToken> refs_result;
1367-
refs_result.push_back({tok, std::move(errors)});
1367+
refs_result.emplace_back(tok, std::move(errors));
13681368
return refs_result;
13691369
}
13701370

lib/astutils.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,10 @@ bool succeeds(const Token* tok1, const Token* tok2);
252252
bool exprDependsOnThis(const Token* expr, bool onVar = true, nonneg int depth = 0);
253253

254254
struct ReferenceToken {
255+
ReferenceToken(const Token* t, ErrorPath e)
256+
: token(t)
257+
, errors(std::move(e))
258+
{}
255259
const Token* token;
256260
ErrorPath errors;
257261
};

0 commit comments

Comments
 (0)