Index: clang-tidy/misc/UnusedParametersCheck.cpp =================================================================== --- clang-tidy/misc/UnusedParametersCheck.cpp +++ clang-tidy/misc/UnusedParametersCheck.cpp @@ -59,7 +59,8 @@ 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 @@ } // namespace tidy } // namespace clang - Index: test/clang-tidy/misc-unused-parameters.cpp =================================================================== --- test/clang-tidy/misc-unused-parameters.cpp +++ test/clang-tidy/misc-unused-parameters.cpp @@ -88,3 +88,14 @@ } } // 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*/) {}