From 9b46e9c5de19f91c4b6b8b1d3405875c48190aac Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Wed, 22 Jul 2015 17:30:35 +0000 Subject: [PATCH] misc-unused-parameters: Fix handling of parameters in template functions. The parameters of the function templates were being marked as incorrectly be marked as unused. Added a test for this and changed the check to use the same isReferenced() || !getDeclName() logic as Sema::DiagnoseUnusedParameters. Patch Scott Wallace, thank you! llvm-svn: 242912 --- clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp | 4 ++-- clang-tools-extra/test/clang-tidy/misc-unused-parameters.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp index bfc213e..8449eaf 100644 --- a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp @@ -59,7 +59,8 @@ void UnusedParametersCheck::check(const MatchFinder::MatchResult &Result) { if (!Function->doesThisDeclarationHaveABody()) return; const auto *Param = Result.Nodes.getNodeAs("x"); - if (Param->isUsed()) + if (Param->isUsed() || Param->isReferenced() || !Param->getDeclName() || + Param->hasAttr()) return; auto MyDiag = diag(Param->getLocation(), "parameter '%0' is unused") @@ -102,4 +103,3 @@ void UnusedParametersCheck::check(const MatchFinder::MatchResult &Result) { } // namespace tidy } // namespace clang - diff --git a/clang-tools-extra/test/clang-tidy/misc-unused-parameters.cpp b/clang-tools-extra/test/clang-tidy/misc-unused-parameters.cpp index 3b54cc5..fc8a4ee 100644 --- a/clang-tools-extra/test/clang-tidy/misc-unused-parameters.cpp +++ b/clang-tools-extra/test/clang-tidy/misc-unused-parameters.cpp @@ -88,3 +88,14 @@ void someMoreCallSites() { } } // end namespace + +template void someFunctionTemplate(T b, T e) { (void)b; (void)e; } + +template void someFunctionTemplateOneUnusedParam(T b, T e) { (void)e; } +// CHECK-MESSAGES: :[[@LINE-1]]:65: warning +// CHECK-FIXES: {{^}}template void someFunctionTemplateOneUnusedParam(T /*b*/, T e) { (void)e; } + +template void someFunctionTemplateAllUnusedParams(T b, T e) {} +// CHECK-MESSAGES: :[[@LINE-1]]:66: warning +// CHECK-MESSAGES: :[[@LINE-2]]:71: warning +// CHECK-FIXES: {{^}}template void someFunctionTemplateAllUnusedParams(T /*b*/, T /*e*/) {} -- 2.7.4