Skip to content

Commit cf93cca

Browse files
committed
avoid progress-related hot spot in ValueFlowPassRunner::run() [skip ci]
1 parent 85ee368 commit cf93cca

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

lib/valueflow.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7210,9 +7210,12 @@ struct ValueFlowPassRunner {
72107210
std::size_t n = state.settings.vfOptions.maxIterations;
72117211
while (n > 0 && values != getTotalValues()) {
72127212
values = getTotalValues();
7213-
const std::string passnum = std::to_string(state.settings.vfOptions.maxIterations - n + 1);
72147213
if (std::any_of(passes.begin(), passes.end(), [&](const ValuePtr<ValueFlowPass>& pass) {
7215-
ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress >= 0, state.tokenlist.getSourceFilePath(), std::string("ValueFlow::") + pass->name() + (' ' + passnum));
7214+
const std::string passnum = std::to_string(state.settings.vfOptions.maxIterations - n + 1);
7215+
// the string concatination is a hot spot in TestIO::testScanfArgument and TestIO::testPrintfArgumentVariables
7216+
const bool doProgress = state.settings.reportProgress >= 0;
7217+
std::string stage = doProgress ? std::string("ValueFlow::") + pass->name() + (' ' + passnum) : "";
7218+
ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress >= 0, state.tokenlist.getSourceFilePath(), std::move(stage));
72167219
return run(pass);
72177220
}))
72187221
return true;

0 commit comments

Comments
 (0)