From 4a63af02ed4d252d8704586d1ac7fb9c8a9ed99d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Wed, 2 Mar 2022 07:46:47 +0100 Subject: [PATCH] enabled functionConst and functionStatic in selfcheck (#3862) * fixed functionConst findings and enabled it in selfcheck * fixed functionStatic findings and enabled it in selfcheck * .travis_suppressions: adjusted comment * testimportproject.cpp: added missing asserts --- .travis_suppressions | 4 +--- lib/checkunusedfunctions.cpp | 2 +- lib/checkunusedfunctions.h | 2 +- lib/forwardanalyzer.cpp | 2 +- lib/importproject.h | 2 +- lib/pathanalysis.h | 2 +- lib/symboldatabase.cpp | 4 ++-- lib/symboldatabase.h | 2 ++ lib/valueflow.cpp | 2 +- test/testimportproject.cpp | 24 ++++++++++++------------ test/testlibrary.cpp | 2 +- test/testplatform.cpp | 2 +- test/testsuite.cpp | 4 ++-- test/testsuite.h | 4 ++-- test/testsuppressions.cpp | 10 +++++----- test/testtoken.cpp | 6 +++--- test/testtokenrange.cpp | 2 +- test/testutils.cpp | 4 ++-- test/testvarid.cpp | 2 +- 19 files changed, 41 insertions(+), 41 deletions(-) diff --git a/.travis_suppressions b/.travis_suppressions index 36c9f9417..be88bc127 100644 --- a/.travis_suppressions +++ b/.travis_suppressions @@ -1,8 +1,6 @@ unusedPrivateFunction:test/testbufferoverrun.cpp unusedPrivateFunction:test/testcmdlineparser.cpp shadowFunction -functionConst -functionStatic bitwiseOnBoolean # temporary suppressions - fix the warnings! @@ -13,7 +11,7 @@ symbolDatabaseWarning:gui/temp/moc_*.cpp simplifyUsing:gui/temp/moc_*.cpp symbolDatabaseWarning:tools/triage/moc_*.cpp -# debug suppressions +# --debug-warnings suppressions valueFlowBailout valueFlowBailoutIncompleteVar autoNoType diff --git a/lib/checkunusedfunctions.cpp b/lib/checkunusedfunctions.cpp index f9efdec07..e8cc100f3 100644 --- a/lib/checkunusedfunctions.cpp +++ b/lib/checkunusedfunctions.cpp @@ -302,7 +302,7 @@ static bool isOperatorFunction(const std::string & funcName) -bool CheckUnusedFunctions::check(ErrorLogger * const errorLogger, const Settings& settings) +bool CheckUnusedFunctions::check(ErrorLogger * const errorLogger, const Settings& settings) const { bool errors = false; for (std::map::const_iterator it = mFunctions.begin(); it != mFunctions.end(); ++it) { diff --git a/lib/checkunusedfunctions.h b/lib/checkunusedfunctions.h index 6606f276c..e1bf019aa 100644 --- a/lib/checkunusedfunctions.h +++ b/lib/checkunusedfunctions.h @@ -63,7 +63,7 @@ public: void parseTokens(const Tokenizer &tokenizer, const char FileName[], const Settings *settings); // Return true if an error is reported. - bool check(ErrorLogger * const errorLogger, const Settings& settings); + bool check(ErrorLogger * const errorLogger, const Settings& settings) const; /** @brief Parse current TU and extract file info */ Check::FileInfo *getFileInfo(const Tokenizer *tokenizer, const Settings *settings) const override; diff --git a/lib/forwardanalyzer.cpp b/lib/forwardanalyzer.cpp index 8b9f592ff..7b9b98bd9 100644 --- a/lib/forwardanalyzer.cpp +++ b/lib/forwardanalyzer.cpp @@ -312,7 +312,7 @@ struct ForwardTraversal { return Token::findsimplematch(endBlock->link(), "goto", endBlock); } - bool hasJump(const Token* endBlock) { + static bool hasJump(const Token* endBlock) { return Token::findmatch(endBlock->link(), "goto|break", endBlock); } diff --git a/lib/importproject.h b/lib/importproject.h index 0ecdf8314..d88a523c7 100644 --- a/lib/importproject.h +++ b/lib/importproject.h @@ -115,7 +115,7 @@ private: bool importVcxproj(const std::string &filename, std::map &variables, const std::string &additionalIncludeDirectories, const std::vector &fileFilters); bool importBcb6Prj(const std::string &projectFilename); - void printError(const std::string &message); + static void printError(const std::string &message); void setRelativePaths(const std::string &filename); diff --git a/lib/pathanalysis.h b/lib/pathanalysis.h index b75095218..ece279fbd 100644 --- a/lib/pathanalysis.h +++ b/lib/pathanalysis.h @@ -48,7 +48,7 @@ struct PathAnalysis { void forward(const std::function& f) const; - Info forwardFind(std::function pred) { + Info forwardFind(std::function pred) const { Info result{}; forward([&](const Info& info) { if (pred(info)) { diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index c95a28cdd..568f0e009 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -1156,7 +1156,7 @@ void SymbolDatabase::createSymbolDatabaseSetTypePointers() const Type *type = findVariableType(tok->scope(), tok); if (type) - const_cast(tok)->type(type); + const_cast(tok)->type(type); // TODO: avoid const_cast } } @@ -1428,7 +1428,7 @@ void SymbolDatabase::createSymbolDatabaseIncompleteVars() continue; if (mSettings->standards.cpp >= Standards::CPP20 && cpp20keywords.count(tok->str()) > 0) continue; - const_cast(tok)->isIncompleteVar(true); + const_cast(tok)->isIncompleteVar(true); // TODO: avoid const_cast } } diff --git a/lib/symboldatabase.h b/lib/symboldatabase.h index b6c8f36b0..3d0a4be89 100644 --- a/lib/symboldatabase.h +++ b/lib/symboldatabase.h @@ -1450,10 +1450,12 @@ private: void createSymbolDatabaseSetScopePointers(); void createSymbolDatabaseSetFunctionPointers(bool firstPass); void createSymbolDatabaseSetVariablePointers(); + // cppcheck-suppress functionConst void createSymbolDatabaseSetTypePointers(); void createSymbolDatabaseSetSmartPointerType(); void createSymbolDatabaseEnums(); void createSymbolDatabaseEscapeFunctions(); + // cppcheck-suppress functionConst void createSymbolDatabaseIncompleteVars(); void addClassFunction(Scope **scope, const Token **tok, const Token *argStart); diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 73df862ea..1f2a460e7 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1824,7 +1824,7 @@ class SelectValueFromVarIdMapRange { return mIt->second; } - pointer operator->() { + pointer operator->() const { return &mIt->second; } diff --git a/test/testimportproject.cpp b/test/testimportproject.cpp index d216a2f61..a0cc3decc 100644 --- a/test/testimportproject.cpp +++ b/test/testimportproject.cpp @@ -117,7 +117,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(1, importer.fileSettings.size()); ASSERT_EQUALS("TEST1=1;TEST2=2", importer.fileSettings.begin()->defines); } @@ -132,7 +132,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(1, importer.fileSettings.size()); ASSERT_EQUALS("C:/bar.c", importer.fileSettings.begin()->filename); #else @@ -143,7 +143,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(1, importer.fileSettings.size()); ASSERT_EQUALS("/bar.c", importer.fileSettings.begin()->filename); #endif @@ -157,7 +157,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(1, importer.fileSettings.size()); ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename); } @@ -170,7 +170,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(0, importer.fileSettings.size()); } @@ -188,7 +188,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(2, importer.fileSettings.size()); ASSERT_EQUALS("C:/Users/dan/git/test-cppcheck/mylib/src/", importer.fileSettings.begin()->includePaths.front()); } @@ -207,7 +207,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(2, importer.fileSettings.size()); ASSERT_EQUALS("C:/Users/dan/git/test-cppcheck/mylib/second src/", importer.fileSettings.begin()->includePaths.front()); } @@ -223,7 +223,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(1, importer.fileSettings.size()); ASSERT_EQUALS("FILESDIR=\"/some/path\"", importer.fileSettings.begin()->defines); ASSERT_EQUALS(1, importer.fileSettings.begin()->includePaths.size()); @@ -243,7 +243,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); // Do not crash + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); // Do not crash } void importCompileCommands9() const { @@ -258,7 +258,7 @@ private: }])"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); } void importCompileCommandsArgumentsSection() const { @@ -267,7 +267,7 @@ private: "\"file\": \"src.c\" } ]"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(true, importer.importCompileCommands(istr)); ASSERT_EQUALS(1, importer.fileSettings.size()); ASSERT_EQUALS("/tmp/src.c", importer.fileSettings.begin()->filename); } @@ -277,7 +277,7 @@ private: "\"file\": \"src.mm\" } ]"; std::istringstream istr(json); TestImporter importer; - importer.importCompileCommands(istr); + ASSERT_EQUALS(false, importer.importCompileCommands(istr)); ASSERT_EQUALS(0, importer.fileSettings.size()); } diff --git a/test/testlibrary.cpp b/test/testlibrary.cpp index 32c34ecbd..2c6d2b0cf 100644 --- a/test/testlibrary.cpp +++ b/test/testlibrary.cpp @@ -76,7 +76,7 @@ private: return library.load(doc); } - void isCompliantValidationExpression() { + void isCompliantValidationExpression() const { ASSERT_EQUALS(true, Library::isCompliantValidationExpression("-1")); ASSERT_EQUALS(true, Library::isCompliantValidationExpression("1")); ASSERT_EQUALS(true, Library::isCompliantValidationExpression("1:")); diff --git a/test/testplatform.cpp b/test/testplatform.cpp index f1f11b35e..70beef093 100644 --- a/test/testplatform.cpp +++ b/test/testplatform.cpp @@ -262,7 +262,7 @@ private: ASSERT_EQUALS(0, platform.long_long_bit); } - void invalid_config_file_1() { + void invalid_config_file_1() const { // Invalid XML file: mismatching elements "boolt" vs "bool". const char xmldata[] = "\n" "\n" diff --git a/test/testsuite.cpp b/test/testsuite.cpp index 3ee2f4d34..3927bb322 100644 --- a/test/testsuite.cpp +++ b/test/testsuite.cpp @@ -167,7 +167,7 @@ bool TestFixture::assertEquals(const char * const filename, const unsigned int l return expected == actual; } -std::string TestFixture::deleteLineNumber(const std::string &message) const +std::string TestFixture::deleteLineNumber(const std::string &message) { std::string result(message); // delete line number in "...:NUMBER:..." @@ -290,7 +290,7 @@ void TestFixture::assertNoThrowFail(const char * const filename, const unsigned } -void TestFixture::complainMissingLib(const char * const libname) const +void TestFixture::complainMissingLib(const char * const libname) { missingLibs.insert(libname); } diff --git a/test/testsuite.h b/test/testsuite.h index a2f5e7067..13bbf7fde 100644 --- a/test/testsuite.h +++ b/test/testsuite.h @@ -90,8 +90,8 @@ protected: void assertThrow(const char * const filename, const unsigned int linenr) const; void assertThrowFail(const char * const filename, const unsigned int linenr) const; void assertNoThrowFail(const char * const filename, const unsigned int linenr) const; - void complainMissingLib(const char * const libname) const; - std::string deleteLineNumber(const std::string &message) const; + static void complainMissingLib(const char * const libname); + static std::string deleteLineNumber(const std::string &message); void setVerbose(bool v) { mVerbose = v; diff --git a/test/testsuppressions.cpp b/test/testsuppressions.cpp index 4ee92a71e..e9ee77924 100644 --- a/test/testsuppressions.cpp +++ b/test/testsuppressions.cpp @@ -84,7 +84,7 @@ private: ASSERT_EQUALS("", suppressions.parseFile(s2)); } - Suppressions::ErrorMessage errorMessage(const std::string &errorId) const { + static Suppressions::ErrorMessage errorMessage(const std::string &errorId) { Suppressions::ErrorMessage ret; ret.errorId = errorId; ret.hash = 0; @@ -93,7 +93,7 @@ private: return ret; } - Suppressions::ErrorMessage errorMessage(const std::string &errorId, const std::string &file, int line) const { + static Suppressions::ErrorMessage errorMessage(const std::string &errorId, const std::string &file, int line) { Suppressions::ErrorMessage ret; ret.errorId = errorId; ret.setFileName(file); @@ -484,13 +484,13 @@ private: ASSERT_EQUALS(true, s2.isSuppressed(errorMessage("abc", "include/1.h", 142))); } - void suppressionsLine0() { + void suppressionsLine0() const { Suppressions suppressions; suppressions.addSuppressionLine("syntaxError:*:0"); ASSERT_EQUALS(true, suppressions.isSuppressed(errorMessage("syntaxError", "test.cpp", 0))); } - void suppressionsFileComment() { + void suppressionsFileComment() const { std::istringstream file1("# comment\nabc"); Suppressions suppressions1; suppressions1.parseFile(file1); @@ -746,7 +746,7 @@ private: ASSERT_EQUALS("", errout.str()); } - void symbol() { + void symbol() const { Suppressions::Suppression s; s.errorId = "foo"; s.symbolName = "array*"; diff --git a/test/testtoken.cpp b/test/testtoken.cpp index 59afa2b8b..34a963e16 100644 --- a/test/testtoken.cpp +++ b/test/testtoken.cpp @@ -1103,14 +1103,14 @@ private: ASSERT(t == nullptr); } - void findClosingBracket() { + void findClosingBracket() const { givenACodeSampleToTokenize var("template struct S : public Fred> {}"); const Token* const t = var.tokens()->next()->findClosingBracket(); ASSERT(Token::simpleMatch(t, "> struct")); } - void expressionString() { + void expressionString() const { givenACodeSampleToTokenize var1("void f() { *((unsigned long long *)x) = 0; }"); const Token *const tok1 = Token::findsimplematch(var1.tokens(), "*"); ASSERT_EQUALS("*((unsigned long long*)x)", tok1->expressionString()); @@ -1132,7 +1132,7 @@ private: ASSERT_EQUALS("x=\"\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\"", data6.tokens()->next()->expressionString()); } - void hasKnownIntValue() { + void hasKnownIntValue() const { // pointer might be NULL ValueFlow::Value v1(0); diff --git a/test/testtokenrange.cpp b/test/testtokenrange.cpp index 30f07f397..9ba8e7f55 100644 --- a/test/testtokenrange.cpp +++ b/test/testtokenrange.cpp @@ -45,7 +45,7 @@ private: TEST_CASE(exampleAlgorithms); } - std::string testTokenRange(ConstTokenRange range, const Token* start, const Token* end) const { + static std::string testTokenRange(ConstTokenRange range, const Token* start, const Token* end) { auto tokenToString = [](const Token* t) { return t ? t->str() : ""; }; diff --git a/test/testutils.cpp b/test/testutils.cpp index fb1f545a5..e20c0c7a0 100644 --- a/test/testutils.cpp +++ b/test/testutils.cpp @@ -32,7 +32,7 @@ private: TEST_CASE(matchglob); } - void isValidGlobPattern() { + void isValidGlobPattern() const { ASSERT_EQUALS(true, ::isValidGlobPattern("*")); ASSERT_EQUALS(true, ::isValidGlobPattern("*x")); ASSERT_EQUALS(true, ::isValidGlobPattern("x*")); @@ -52,7 +52,7 @@ private: ASSERT_EQUALS(false, ::isValidGlobPattern("x??")); } - void matchglob() { + void matchglob() const { ASSERT_EQUALS(true, ::matchglob("*", "xyz")); ASSERT_EQUALS(true, ::matchglob("x*", "xyz")); ASSERT_EQUALS(true, ::matchglob("*z", "xyz")); diff --git a/test/testvarid.cpp b/test/testvarid.cpp index 1c43e9606..8bf448816 100644 --- a/test/testvarid.cpp +++ b/test/testvarid.cpp @@ -1946,7 +1946,7 @@ private: ASSERT(actual.find("X@2 = 0") != std::string::npos); } - std::string getLine(const std::string &code, int lineNumber) { + static std::string getLine(const std::string &code, int lineNumber) { std::string nr = MathLib::toString(lineNumber); const std::string::size_type pos1 = code.find('\n' + nr + ": "); if (pos1 == std::string::npos)