@@ -1495,7 +1495,7 @@ void CppCheck::executeAddons(const std::string& dumpFile, const FileWithDetails&
14951495
14961496void CppCheck::executeAddons (const std::vector<std::string>& files, const std::string& file0)
14971497{
1498- if (mSettings .addons .empty () || files.empty ())
1498+ if (mSettings .addons .empty () || files.empty () || Settings::unusedFunctionOnly () )
14991499 return ;
15001500
15011501 const bool isCtuInfo = endsWith (files[0 ], " .ctu-info" );
@@ -1807,22 +1807,25 @@ void CppCheck::analyseClangTidy(const FileSettings &fileSettings)
18071807bool CppCheck::analyseWholeProgram ()
18081808{
18091809 bool errors = false ;
1810- // Analyse the tokens
1811- CTU::FileInfo ctu;
1812- if (mSettings .useSingleJob () || !mSettings .buildDir .empty ())
1813- {
1814- for (const Check::FileInfo *fi : mFileInfo ) {
1815- const auto *fi2 = dynamic_cast <const CTU::FileInfo *>(fi);
1816- if (fi2) {
1817- ctu.functionCalls .insert (ctu.functionCalls .end (), fi2->functionCalls .cbegin (), fi2->functionCalls .cend ());
1818- ctu.nestedCalls .insert (ctu.nestedCalls .end (), fi2->nestedCalls .cbegin (), fi2->nestedCalls .cend ());
1810+
1811+ if (!Settings::unusedFunctionOnly ()) {
1812+ // Analyse the tokens
1813+ CTU::FileInfo ctu;
1814+ if (mSettings .useSingleJob () || !mSettings .buildDir .empty ())
1815+ {
1816+ for (const Check::FileInfo *fi : mFileInfo ) {
1817+ const auto *fi2 = dynamic_cast <const CTU::FileInfo *>(fi);
1818+ if (fi2) {
1819+ ctu.functionCalls .insert (ctu.functionCalls .end (), fi2->functionCalls .cbegin (), fi2->functionCalls .cend ());
1820+ ctu.nestedCalls .insert (ctu.nestedCalls .end (), fi2->nestedCalls .cbegin (), fi2->nestedCalls .cend ());
1821+ }
18191822 }
18201823 }
1821- }
18221824
1823- // cppcheck-suppress shadowFunction - TODO: fix this
1824- for (Check *check : Check::instances ())
1825- errors |= check->analyseWholeProgram (ctu, mFileInfo , mSettings , mErrorLogger ); // TODO: ctu
1825+ // cppcheck-suppress shadowFunction - TODO: fix this
1826+ for (Check *check : Check::instances ())
1827+ errors |= check->analyseWholeProgram (ctu, mFileInfo , mSettings , mErrorLogger ); // TODO: ctu
1828+ }
18261829
18271830 if (mUnusedFunctionsCheck )
18281831 errors |= mUnusedFunctionsCheck ->check (mSettings , mErrorLogger );
@@ -1832,9 +1835,16 @@ bool CppCheck::analyseWholeProgram()
18321835
18331836unsigned int CppCheck::analyseWholeProgram (const std::string &buildDir, const std::list<FileWithDetails> &files, const std::list<FileSettings>& fileSettings, const std::string& ctuInfo)
18341837{
1835- executeAddonsWholeProgram (files, fileSettings, ctuInfo);
18361838 if (mSettings .checks .isEnabled (Checks::unusedFunction))
18371839 CheckUnusedFunctions::analyseWholeProgram (mSettings , mErrorLogger , buildDir);
1840+
1841+ if (mUnusedFunctionsCheck )
1842+ mUnusedFunctionsCheck ->check (mSettings , mErrorLogger );
1843+
1844+ if (Settings::unusedFunctionOnly ())
1845+ return mLogger ->exitcode ();
1846+
1847+ executeAddonsWholeProgram (files, fileSettings, ctuInfo);
18381848 std::list<Check::FileInfo*> fileInfoList;
18391849 CTU::FileInfo ctuFileInfo;
18401850
@@ -1885,9 +1895,6 @@ unsigned int CppCheck::analyseWholeProgram(const std::string &buildDir, const st
18851895 for (Check *check : Check::instances ())
18861896 check->analyseWholeProgram (ctuFileInfo, fileInfoList, mSettings , mErrorLogger );
18871897
1888- if (mUnusedFunctionsCheck )
1889- mUnusedFunctionsCheck ->check (mSettings , mErrorLogger );
1890-
18911898 for (Check::FileInfo *fi : fileInfoList)
18921899 delete fi;
18931900
0 commit comments