@@ -631,18 +631,20 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
631631 mPlistFile .close ();
632632 }
633633
634- CheckUnusedFunctions checkUnusedFunctions;
635-
636634 try {
637635 if (mSettings .library .markupFile (filename)) {
638- Tokenizer tokenizer (mSettings , this );
639- if (fileStream)
640- tokenizer.list .createTokens (*fileStream, filename);
641- else {
642- std::ifstream in (filename);
643- tokenizer.list .createTokens (in, filename);
636+ if (mSettings .checks .isEnabled (Checks::unusedFunction) &&
637+ mSettings .useSingleJob () &&
638+ mSettings .buildDir .empty ()) {
639+ Tokenizer tokenizer (mSettings , this );
640+ if (fileStream)
641+ tokenizer.list .createTokens (*fileStream, filename);
642+ else {
643+ std::ifstream in (filename);
644+ tokenizer.list .createTokens (in, filename);
645+ }
646+ CheckUnusedFunctions::parseTokens (tokenizer, mSettings );
644647 }
645- CheckUnusedFunctions::parseTokens (tokenizer, mSettings );
646648 return EXIT_SUCCESS;
647649 }
648650
@@ -933,10 +935,6 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
933935 // Check normal tokens
934936 checkNormalTokens (tokenizer);
935937
936- // Analyze info..
937- if (!mSettings .buildDir .empty ())
938- checkUnusedFunctions.parseTokens (tokenizer, filename.c_str (), mSettings );
939-
940938#ifdef HAVE_RULES
941939 // handling of "simple" rules has been removed.
942940 if (hasRule (" simple" ))
@@ -1017,7 +1015,6 @@ unsigned int CppCheck::checkFile(const std::string& filename, const std::string
10171015 }
10181016
10191017 if (!mSettings .buildDir .empty ()) {
1020- mAnalyzerInformation .setFileInfo (" CheckUnusedFunctions" , checkUnusedFunctions.analyzerInfo ());
10211018 mAnalyzerInformation .close ();
10221019 }
10231020
@@ -1072,6 +1069,8 @@ void CppCheck::checkRawTokens(const Tokenizer &tokenizer)
10721069
10731070void CppCheck::checkNormalTokens (const Tokenizer &tokenizer)
10741071{
1072+ CheckUnusedFunctions unusedFunctionsChecker;
1073+
10751074 // TODO: this should actually be the behavior if only "--enable=unusedFunction" is specified - see #10648
10761075 const char * unusedFunctionOnly = std::getenv (" UNUSEDFUNCTION_ONLY" );
10771076 const bool doUnusedFunctionOnly = unusedFunctionOnly && (std::strcmp (unusedFunctionOnly, " 1" ) == 0 );
@@ -1105,12 +1104,20 @@ void CppCheck::checkNormalTokens(const Tokenizer &tokenizer)
11051104 }
11061105 }
11071106
1107+ if (mSettings .checks .isEnabled (Checks::unusedFunction) && !mSettings .buildDir .empty ()) {
1108+ unusedFunctionsChecker.parseTokens (tokenizer, tokenizer.list .getFiles ().front ().c_str (), mSettings );
1109+ }
1110+ if (mSettings .checks .isEnabled (Checks::unusedFunction) &&
1111+ mSettings .useSingleJob () &&
1112+ mSettings .buildDir .empty ()) {
1113+ CheckUnusedFunctions::parseTokens (tokenizer, mSettings );
1114+ }
1115+
11081116 if (mSettings .clang ) {
11091117 // TODO: Use CTU for Clang analysis
11101118 return ;
11111119 }
11121120
1113-
11141121 if (mSettings .useSingleJob () || !mSettings .buildDir .empty ()) {
11151122 // Analyse the tokens..
11161123
@@ -1136,8 +1143,10 @@ void CppCheck::checkNormalTokens(const Tokenizer &tokenizer)
11361143 }
11371144 }
11381145 }
1146+ }
11391147
1140- CheckUnusedFunctions::parseTokens (tokenizer, mSettings );
1148+ if (mSettings .checks .isEnabled (Checks::unusedFunction) && !mSettings .buildDir .empty ()) {
1149+ mAnalyzerInformation .setFileInfo (" CheckUnusedFunctions" , unusedFunctionsChecker.analyzerInfo ());
11411150 }
11421151
11431152#ifdef HAVE_RULES
@@ -1784,7 +1793,8 @@ bool CppCheck::analyseWholeProgram()
17841793 for (Check *check : Check::instances ())
17851794 errors |= check->analyseWholeProgram (&ctu, mFileInfo , mSettings , *this ); // TODO: ctu
17861795
1787- errors |= CheckUnusedFunctions::check (mSettings , *this );
1796+ if (mSettings .checks .isEnabled (Checks::unusedFunction))
1797+ errors |= CheckUnusedFunctions::check (mSettings , *this );
17881798
17891799 return errors && (mExitCode > 0 );
17901800}
@@ -1850,7 +1860,8 @@ void CppCheck::analyseWholeProgram(const std::string &buildDir, const std::list<
18501860 for (Check *check : Check::instances ())
18511861 check->analyseWholeProgram (&ctuFileInfo, fileInfoList, mSettings , *this );
18521862
1853- CheckUnusedFunctions::check (mSettings , *this );
1863+ if (mSettings .checks .isEnabled (Checks::unusedFunction))
1864+ CheckUnusedFunctions::check (mSettings , *this );
18541865
18551866 for (Check::FileInfo *fi : fileInfoList)
18561867 delete fi;
0 commit comments