From b53722047cdf3159a1f04d456d79f0145e60e104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20St=C3=B6neberg?= Date: Wed, 26 Feb 2025 15:59:21 +0100 Subject: [PATCH] fixed #13662 - do not report unmatched `unusedFunction` inline suppression when check is disabled (#7334) --- cli/cppcheckexecutor.cpp | 2 +- lib/suppressions.cpp | 4 +++- lib/suppressions.h | 2 +- test/cli/inline-suppress_test.py | 20 +++++++++++++++++++- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/cli/cppcheckexecutor.cpp b/cli/cppcheckexecutor.cpp index 6ae29babb01..de799cace7f 100644 --- a/cli/cppcheckexecutor.cpp +++ b/cli/cppcheckexecutor.cpp @@ -415,7 +415,7 @@ bool CppCheckExecutor::reportSuppressions(const Settings &settings, const Suppre if (settings.inlineSuppressions) { // report unmatched unusedFunction suppressions err |= SuppressionList::reportUnmatchedSuppressions( - suppressions.getUnmatchedInlineSuppressions(), errorLogger); + suppressions.getUnmatchedInlineSuppressions(unusedFunctionCheckEnabled), errorLogger); } err |= SuppressionList::reportUnmatchedSuppressions(suppressions.getUnmatchedGlobalSuppressions(unusedFunctionCheckEnabled), errorLogger); diff --git a/lib/suppressions.cpp b/lib/suppressions.cpp index 0e8ef6b7dad..db2983d3054 100644 --- a/lib/suppressions.cpp +++ b/lib/suppressions.cpp @@ -564,7 +564,7 @@ std::list SuppressionList::getUnmatchedGlobalSuppr return result; } -std::list SuppressionList::getUnmatchedInlineSuppressions() const +std::list SuppressionList::getUnmatchedInlineSuppressions(const bool includeUnusedFunction) const { std::list result; for (const SuppressionList::Suppression &s : SuppressionList::mSuppressions) { @@ -576,6 +576,8 @@ std::list SuppressionList::getUnmatchedInlineSuppr continue; if (s.hash > 0) continue; + if (!includeUnusedFunction && s.errorId == ID_UNUSEDFUNCTION) + continue; result.push_back(s); } return result; diff --git a/lib/suppressions.h b/lib/suppressions.h index 35aad4720ff..33735c6bcac 100644 --- a/lib/suppressions.h +++ b/lib/suppressions.h @@ -259,7 +259,7 @@ class CPPCHECKLIB SuppressionList { * @brief Returns list of unmatched inline suppressions. * @return list of unmatched suppressions */ - std::list getUnmatchedInlineSuppressions() const; + std::list getUnmatchedInlineSuppressions(bool includeUnusedFunction) const; /** * @brief Returns list of all suppressions. diff --git a/test/cli/inline-suppress_test.py b/test/cli/inline-suppress_test.py index 0b4eb638fa6..962f6f58399 100644 --- a/test/cli/inline-suppress_test.py +++ b/test/cli/inline-suppress_test.py @@ -419,4 +419,22 @@ def test_unused_function_unmatched_builddir_j_thread(tmpdir): def test_unused_function_unmatched_builddir_j_process(tmpdir): build_dir = os.path.join(tmpdir, 'b1') os.mkdir(build_dir) - __test_unused_function_unmatched(tmpdir, ['-j2', '--cppcheck-build-dir={}'.format(build_dir), '--executor=process']) \ No newline at end of file + __test_unused_function_unmatched(tmpdir, ['-j2', '--cppcheck-build-dir={}'.format(build_dir), '--executor=process']) + + +# do not report unmatched unusedFunction inline suppressions when unusedFunction check is disabled +def test_unused_function_disabled_unmatched(): + args = [ + '-q', + '--template=simple', + '--enable=warning,information', + '--inline-suppr', + 'proj-inline-suppress/unusedFunctionUnmatched.cpp' + ] + + ret, stdout, stderr = cppcheck(args, cwd=__script_dir) + assert stderr.splitlines() == [ + '{}unusedFunctionUnmatched.cpp:5:0: information: Unmatched suppression: uninitvar [unmatchedSuppression]'.format(__proj_inline_suppres_path) + ] + assert stdout == '' + assert ret == 0, stdout \ No newline at end of file