From c6e8887617ec7aa2a34df8b8a6617e96cc1bd67f Mon Sep 17 00:00:00 2001 From: firewave Date: Thu, 9 Jan 2025 14:28:29 +0100 Subject: [PATCH] `Check::analyseWholeProgram()` related cleanup --- Makefile | 2 +- lib/check.h | 6 +----- lib/checkbufferoverrun.cpp | 13 +++++++------ lib/checkbufferoverrun.h | 2 +- lib/checkclass.cpp | 16 ++++++++++------ lib/checkclass.h | 2 +- lib/checknullpointer.cpp | 14 ++++++++------ lib/checknullpointer.h | 2 +- lib/checkuninitvar.cpp | 14 +++++++++----- lib/checkuninitvar.h | 2 +- lib/cppcheck.cpp | 4 ++-- test/testbufferoverrun.cpp | 2 +- test/testclass.cpp | 4 +++- test/testnullpointer.cpp | 2 +- test/testuninitvar.cpp | 2 +- 15 files changed, 48 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index 261f73feae0..686d7ee64e7 100644 --- a/Makefile +++ b/Makefile @@ -734,7 +734,7 @@ test/testcheck.o: test/testcheck.cpp lib/addoninfo.h lib/check.h lib/color.h lib test/testclangimport.o: test/testclangimport.cpp lib/addoninfo.h lib/check.h lib/clangimport.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testclangimport.cpp -test/testclass.o: test/testclass.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkclass.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h +test/testclass.o: test/testclass.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkclass.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testclass.cpp test/testcmdlineparser.o: test/testcmdlineparser.cpp cli/cmdlinelogger.h cli/cmdlineparser.h externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h test/redirect.h diff --git a/lib/check.h b/lib/check.h index 15d0611a908..173d93856b5 100644 --- a/lib/check.h +++ b/lib/check.h @@ -120,11 +120,7 @@ class CPPCHECKLIB Check { } // Return true if an error is reported. - virtual bool analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& /*settings*/, ErrorLogger & /*errorLogger*/) { - (void)ctu; - (void)fileInfo; - //(void)settings; - //(void)errorLogger; + virtual bool analyseWholeProgram(const CTU::FileInfo& /*ctu*/, const std::list& /*fileInfo*/, const Settings& /*settings*/, ErrorLogger & /*errorLogger*/) { return false; } diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index e15389cae0a..e5b8e3b2093 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -982,17 +982,18 @@ Check::FileInfo * CheckBufferOverrun::loadFileInfoFromXml(const tinyxml2::XMLEle } /** @brief Analyse all file infos for all TU */ -bool CheckBufferOverrun::analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) +bool CheckBufferOverrun::analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) { - if (!ctu) - return false; - bool foundErrors = false; - CheckBufferOverrun dummy(nullptr, &settings, &errorLogger); dummy. logChecker("CheckBufferOverrun::analyseWholeProgram"); - const std::map> callsMap = ctu->getCallsMap(); + if (fileInfo.empty()) + return false; + + const std::map> callsMap = ctu.getCallsMap(); + + bool foundErrors = false; for (const Check::FileInfo* fi1 : fileInfo) { const auto *fi = dynamic_cast(fi1); diff --git a/lib/checkbufferoverrun.h b/lib/checkbufferoverrun.h index 4cc84905c3a..66d8966b6e5 100644 --- a/lib/checkbufferoverrun.h +++ b/lib/checkbufferoverrun.h @@ -72,7 +72,7 @@ class CPPCHECKLIB CheckBufferOverrun : public Check { Check::FileInfo *getFileInfo(const Tokenizer &tokenizer, const Settings &settings) const override; /** @brief Analyse all file infos for all TU */ - bool analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; + bool analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; void arrayIndex(); void arrayIndexError(const Token* tok, diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 69be9cbaa8d..5fca5e89817 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -3696,18 +3696,22 @@ Check::FileInfo * CheckClass::loadFileInfoFromXml(const tinyxml2::XMLElement *xm return fileInfo; } -bool CheckClass::analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) +bool CheckClass::analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) { - bool foundErrors = false; - (void)ctu; // This argument is unused - (void)settings; // This argument is unused - - std::unordered_map all; + (void)ctu; + (void)settings; CheckClass dummy(nullptr, &settings, &errorLogger); dummy. logChecker("CheckClass::analyseWholeProgram"); + if (fileInfo.empty()) + return false; + + bool foundErrors = false; + + std::unordered_map all; + for (const Check::FileInfo* fi1 : fileInfo) { const auto *fi = dynamic_cast(fi1); if (!fi) diff --git a/lib/checkclass.h b/lib/checkclass.h index 1242889d6d9..aba5c7fb5d8 100644 --- a/lib/checkclass.h +++ b/lib/checkclass.h @@ -138,7 +138,7 @@ class CPPCHECKLIB CheckClass : public Check { Check::FileInfo * loadFileInfoFromXml(const tinyxml2::XMLElement *xmlElement) const override; /** @brief Analyse all file infos for all TU */ - bool analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; + bool analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; const SymbolDatabase* mSymbolDatabase{}; diff --git a/lib/checknullpointer.cpp b/lib/checknullpointer.cpp index dfdafbb5a57..b0f9f4e8057 100644 --- a/lib/checknullpointer.cpp +++ b/lib/checknullpointer.cpp @@ -634,18 +634,20 @@ Check::FileInfo * CheckNullPointer::loadFileInfoFromXml(const tinyxml2::XMLEleme return fileInfo; } -bool CheckNullPointer::analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) +bool CheckNullPointer::analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) { - if (!ctu) - return false; - bool foundErrors = false; - (void)settings; // This argument is unused + (void)settings; CheckNullPointer dummy(nullptr, &settings, &errorLogger); dummy. logChecker("CheckNullPointer::analyseWholeProgram"); // unusedfunctions - const std::map> callsMap = ctu->getCallsMap(); + if (fileInfo.empty()) + return false; + + const std::map> callsMap = ctu.getCallsMap(); + + bool foundErrors = false; for (const Check::FileInfo* fi1 : fileInfo) { const auto *fi = dynamic_cast(fi1); diff --git a/lib/checknullpointer.h b/lib/checknullpointer.h index 644a76ee676..0c9b2d990c2 100644 --- a/lib/checknullpointer.h +++ b/lib/checknullpointer.h @@ -98,7 +98,7 @@ class CPPCHECKLIB CheckNullPointer : public Check { Check::FileInfo * loadFileInfoFromXml(const tinyxml2::XMLElement *xmlElement) const override; /** @brief Analyse all file infos for all TU */ - bool analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; + bool analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; /** Get error messages. Used by --errorlist */ void getErrorMessages(ErrorLogger *errorLogger, const Settings *settings) const override; diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index d1587142554..04360ae86b3 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1742,14 +1742,18 @@ Check::FileInfo * CheckUninitVar::loadFileInfoFromXml(const tinyxml2::XMLElement return fileInfo; } -bool CheckUninitVar::analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) +bool CheckUninitVar::analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) { - if (!ctu) + (void)settings; + + // TODO: logChecker + + if (fileInfo.empty()) return false; - bool foundErrors = false; - (void)settings; // This argument is unused - const std::map> callsMap = ctu->getCallsMap(); + const std::map> callsMap = ctu.getCallsMap(); + + bool foundErrors = false; for (const Check::FileInfo* fi1 : fileInfo) { const auto *fi = dynamic_cast(fi1); diff --git a/lib/checkuninitvar.h b/lib/checkuninitvar.h index f8328462258..639ebb06b64 100644 --- a/lib/checkuninitvar.h +++ b/lib/checkuninitvar.h @@ -101,7 +101,7 @@ class CPPCHECKLIB CheckUninitVar : public Check { Check::FileInfo * loadFileInfoFromXml(const tinyxml2::XMLElement *xmlElement) const override; /** @brief Analyse all file infos for all TU */ - bool analyseWholeProgram(const CTU::FileInfo *ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; + bool analyseWholeProgram(const CTU::FileInfo &ctu, const std::list &fileInfo, const Settings& settings, ErrorLogger &errorLogger) override; void uninitvarError(const Token* tok, const ValueFlow::Value& v); void uninitdataError(const Token *tok, const std::string &varname); diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 3feb0b7debc..166b4dd9a1d 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -1990,7 +1990,7 @@ bool CppCheck::analyseWholeProgram() // cppcheck-suppress shadowFunction - TODO: fix this for (Check *check : Check::instances()) - errors |= check->analyseWholeProgram(&ctu, mFileInfo, mSettings, mErrorLogger); // TODO: ctu + errors |= check->analyseWholeProgram(ctu, mFileInfo, mSettings, mErrorLogger); // TODO: ctu if (mUnusedFunctionsCheck) errors |= mUnusedFunctionsCheck->check(mSettings, mErrorLogger); @@ -2053,7 +2053,7 @@ unsigned int CppCheck::analyseWholeProgram(const std::string &buildDir, const st // Analyse the tokens // cppcheck-suppress shadowFunction - TODO: fix this for (Check *check : Check::instances()) - check->analyseWholeProgram(&ctuFileInfo, fileInfoList, mSettings, mErrorLogger); + check->analyseWholeProgram(ctuFileInfo, fileInfoList, mSettings, mErrorLogger); if (mUnusedFunctionsCheck) mUnusedFunctionsCheck->check(mSettings, mErrorLogger); diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 6b02b07fc50..e4bce607f3c 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -5236,7 +5236,7 @@ class TestBufferOverrun : public TestFixture { std::list fileInfo; Check& c = getCheck(); fileInfo.push_back(c.getFileInfo(tokenizer, settings0)); - c.analyseWholeProgram(ctu, fileInfo, settings0, *this); // TODO: check result + c.analyseWholeProgram(*ctu, fileInfo, settings0, *this); // TODO: check result while (!fileInfo.empty()) { delete fileInfo.back(); fileInfo.pop_back(); diff --git a/test/testclass.cpp b/test/testclass.cpp index 93d900e1e27..c32995446f4 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -18,6 +18,7 @@ #include "check.h" #include "checkclass.h" +#include "ctu.h" #include "errortypes.h" #include "fixture.h" #include "helpers.h" @@ -9030,7 +9031,8 @@ class TestClass : public TestFixture { } // Check code.. - check.analyseWholeProgram(nullptr, fileInfo, settingsDefault, *this); // TODO: check result + const CTU::FileInfo ctu; + check.analyseWholeProgram(ctu, fileInfo, settingsDefault, *this); // TODO: check result while (!fileInfo.empty()) { delete fileInfo.back(); diff --git a/test/testnullpointer.cpp b/test/testnullpointer.cpp index a9e19991242..7d8d3586e84 100644 --- a/test/testnullpointer.cpp +++ b/test/testnullpointer.cpp @@ -4566,7 +4566,7 @@ class TestNullPointer : public TestFixture { std::list fileInfo; Check& c = getCheck(); fileInfo.push_back(c.getFileInfo(tokenizer, settings)); - c.analyseWholeProgram(ctu, fileInfo, settings, *this); // TODO: check result + c.analyseWholeProgram(*ctu, fileInfo, settings, *this); // TODO: check result while (!fileInfo.empty()) { delete fileInfo.back(); fileInfo.pop_back(); diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index e19ea083fbc..cfc2e8e1f3b 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -7880,7 +7880,7 @@ class TestUninitVar : public TestFixture { std::list fileInfo; Check& c = getCheck(); fileInfo.push_back(c.getFileInfo(tokenizer, settings)); - c.analyseWholeProgram(ctu, fileInfo, settings, *this); // TODO: check result + c.analyseWholeProgram(*ctu, fileInfo, settings, *this); // TODO: check result while (!fileInfo.empty()) { delete fileInfo.back(); fileInfo.pop_back();