From 3f680723c76f67c849aac8408541827368ecc066 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()` --- lib/valueflow.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 83f183643e6..6cf62e3297c 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -7214,12 +7214,15 @@ struct ValueFlowPassRunner { { std::size_t values = 0; std::size_t n = state.settings.vfOptions.maxIterations; + const bool doProgress = state.settings.reportProgress >= 0; while (n > 0 && values != getTotalValues()) { values = getTotalValues(); const std::size_t passnum = state.settings.vfOptions.maxIterations - n + 1; const std::string passnum_s = std::to_string(passnum); if (std::any_of(passes.begin(), passes.end(), [&](const ValuePtr& pass) { - ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress, state.tokenlist.getSourceFilePath(), std::string("ValueFlow::") + pass->name() + (' ' + passnum_s)); + // the string concatination is a hot spot in TestIO::testScanfArgument and TestIO::testPrintfArgumentVariables + std::string stage = doProgress ? std::string("ValueFlow::") + pass->name() + (' ' + passnum_s) : ""; + ProgressReporter progressReporter(state.errorLogger, state.settings.reportProgress, state.tokenlist.getSourceFilePath(), std::move(stage)); return run(pass, passnum); })) return true;