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