@@ -2796,6 +2796,7 @@ bool Tokenizer::simplifyTokens1(const std::string &configuration)
27962796 createSymbolDatabase ();
27972797 }
27982798
2799+ // TODO: this accesses ValueFlow information before it has been generated
27992800 if (mTimerResults ) {
28002801 Timer t (" Tokenizer::simplifyTokens1::setValueType" , mSettings ->showtime , mTimerResults );
28012802 mSymbolDatabase ->setValueTypeInTokenList (true );
@@ -2819,11 +2820,7 @@ bool Tokenizer::simplifyTokens1(const std::string &configuration)
28192820 }
28202821 }
28212822
2822- // TODO: do not run valueflow if no checks are being performed at all - e.g. unusedFunctions only
2823- const char * disableValueflowEnv = std::getenv (" DISABLE_VALUEFLOW" );
2824- const bool doValueFlow = !disableValueflowEnv || (std::strcmp (disableValueflowEnv, " 1" ) != 0 );
2825-
2826- if (doValueFlow) {
2823+ auto setValues = [&](){
28272824 if (mTimerResults ) {
28282825 Timer t (" Tokenizer::simplifyTokens1::ValueFlow" , mSettings ->showtime , mTimerResults );
28292826 ValueFlow::setValues (&list, mSymbolDatabase , mErrorLogger , mSettings );
@@ -2832,6 +2829,15 @@ bool Tokenizer::simplifyTokens1(const std::string &configuration)
28322829 }
28332830
28342831 mSymbolDatabase ->setArrayDimensionsUsingValueFlow ();
2832+ };
2833+
2834+ const char * disableValueflowEnv = std::getenv (" DISABLE_VALUEFLOW" );
2835+ const bool doLazyValueFlow = disableValueflowEnv && (std::strcmp (disableValueflowEnv, " 2" ) == 0 );
2836+ const bool doValueFlow = !disableValueflowEnv || (std::strcmp (disableValueflowEnv, " 1" ) != 0 );
2837+ if (doLazyValueFlow) {
2838+ list.setValuesFunc (std::move (setValues));
2839+ } else if (doValueFlow) {
2840+ setValues ();
28352841 }
28362842
28372843 printDebugOutput (1 );
0 commit comments