From 3a7e58013c3b0a03552794a3b993659a8b6cd2b3 Mon Sep 17 00:00:00 2001 From: firewave Date: Tue, 16 Aug 2022 09:54:50 +0200 Subject: [PATCH 1/2] cppcheck.cpp: added `UNUSEDFUNCTION_ONLY` hack to only perform the `unusedFunction` check --- lib/cppcheck.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index 46023b5a95a..ac41c66bdef 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -1025,6 +1025,10 @@ void CppCheck::checkRawTokens(const Tokenizer &tokenizer) void CppCheck::checkNormalTokens(const Tokenizer &tokenizer) { + // TODO: this should actually be the behavior if only "--enable=unusedFunction" is specified - see #10648 + const char* unusedFunctionOnly = std::getenv("UNUSEDFUNCTION_ONLY"); + const bool doUnusedFunctionOnly = unusedFunctionOnly && (std::strcmp(unusedFunctionOnly, "1") == 0); + // call all "runChecks" in all registered Check classes for (Check *check : Check::instances()) { if (Settings::terminated()) @@ -1033,6 +1037,9 @@ void CppCheck::checkNormalTokens(const Tokenizer &tokenizer) if (Tokenizer::isMaxTime()) return; + if (doUnusedFunctionOnly && dynamic_cast(check) == nullptr) + continue; + Timer timerRunChecks(check->name() + "::runChecks", mSettings.showtime, &s_timerResults); check->runChecks(&tokenizer, &mSettings, this); } @@ -1053,7 +1060,10 @@ void CppCheck::checkNormalTokens(const Tokenizer &tokenizer) mAnalyzerInformation.setFileInfo("ctu", fi1->toString()); } - for (const Check *check: Check::instances()) { + for (const Check *check : Check::instances()) { + if (doUnusedFunctionOnly && dynamic_cast(check) == nullptr) + continue; + Check::FileInfo *fi = check->getFileInfo(&tokenizer, &mSettings); if (fi != nullptr) { if (mSettings.jobs == 1) From a3ee16c0d472ffd3e11b3f5001abfbbcf2fae588 Mon Sep 17 00:00:00 2001 From: firewave Date: Tue, 16 Aug 2022 09:55:04 +0200 Subject: [PATCH 2/2] selfcheck.yml: enabled `UNUSEDFUNCTION_ONLY` hack --- .github/workflows/selfcheck.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/selfcheck.yml b/.github/workflows/selfcheck.yml index e820a32d6a6..88ff0ce90bb 100644 --- a/.github/workflows/selfcheck.yml +++ b/.github/workflows/selfcheck.yml @@ -78,6 +78,7 @@ jobs: ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x050000 -DQ_MOC_OUTPUT_REVISION=67 --enable=unusedFunction --exception-handling -rp=. --project=cmake.output/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr env: DISABLE_VALUEFLOW: 1 + UNUSEDFUNCTION_ONLY: 1 # the following steps are duplicated from above since setting up the build node in a parallel step takes longer than the actual steps - name: CMake (no test) @@ -98,6 +99,7 @@ jobs: ./cppcheck -q --template=selfcheck --error-exitcode=1 --library=cppcheck-lib --library=qt -D__CPPCHECK__ -D__GNUC__ -DQT_VERSION=0x050000 -DQ_MOC_OUTPUT_REVISION=67 --enable=unusedFunction --exception-handling -rp=. --project=cmake.output.notest/compile_commands.json --suppressions-list=.selfcheck_unused_suppressions --inline-suppr env: DISABLE_VALUEFLOW: 1 + UNUSEDFUNCTION_ONLY: 1 - name: Fetch corpus run: | @@ -126,6 +128,7 @@ jobs: head -50 callgrind.annotated.log env: DISABLE_VALUEFLOW: 1 + UNUSEDFUNCTION_ONLY: 1 - uses: actions/upload-artifact@v2 with: