Skip to content

Commit cc09988

Browse files
authored
avoid progress-related hot spot in ValueFlowPassRunner::run() (danmar#8369)
1 parent 2eb4e94 commit cc09988

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

lib/valueflow.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7214,12 +7214,15 @@ struct ValueFlowPassRunner {
72147214
{
72157215
std::size_t values = 0;
72167216
std::size_t n = state.settings.vfOptions.maxIterations;
7217+
const bool doProgress = state.settings.reportProgress >= 0;
72177218
while (n > 0 && values != getTotalValues()) {
72187219
values = getTotalValues();
72197220
const std::size_t passnum = state.settings.vfOptions.maxIterations - n + 1;
72207221
const std::string passnum_s = std::to_string(passnum);
72217222
if (std::any_of(passes.begin(), passes.end(), [&](const ValuePtr<ValueFlowPass>& pass) {
7222-
ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress, state.tokenlist.getSourceFilePath(), std::string("ValueFlow::") + pass->name() + (' ' + passnum_s));
7223+
// the string concatination is a hot spot in TestIO::testScanfArgument and TestIO::testPrintfArgumentVariables
7224+
std::string stage = doProgress ? std::string("ValueFlow::") + pass->name() + (' ' + passnum_s) : "";
7225+
ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress, state.tokenlist.getSourceFilePath(), std::move(stage));
72237226
return run(pass, passnum);
72247227
}))
72257228
return true;

0 commit comments

Comments
 (0)