From 3b59dc0aea26042c3f06dc1a6494887b070f2a24 Mon Sep 17 00:00:00 2001 From: firewave Date: Mon, 23 Mar 2026 11:16:34 +0100 Subject: [PATCH] avoid progress-related hot spot in `ValueFlowPassRunner::run()` [skip ci] --- lib/valueflow.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index f7e057da58f..e6530744958 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -7210,9 +7210,12 @@ struct ValueFlowPassRunner { std::size_t n = state.settings.vfOptions.maxIterations; while (n > 0 && values != getTotalValues()) { values = getTotalValues(); - const std::string passnum = std::to_string(state.settings.vfOptions.maxIterations - n + 1); if (std::any_of(passes.begin(), passes.end(), [&](const ValuePtr& pass) { - ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress >= 0, state.tokenlist.getSourceFilePath(), std::string("ValueFlow::") + pass->name() + (' ' + passnum)); + const std::string passnum = std::to_string(state.settings.vfOptions.maxIterations - n + 1); + // the string concatination is a hot spot in TestIO::testScanfArgument and TestIO::testPrintfArgumentVariables + const bool doProgress = state.settings.reportProgress >= 0; + std::string stage = doProgress ? std::string("ValueFlow::") + pass->name() + (' ' + passnum) : ""; + ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress >= 0, state.tokenlist.getSourceFilePath(), std::move(stage)); return run(pass); })) return true;