[clang-tidy] Don't delete unused parameter in class override method in anonymous namespace.
Summary: Fixes PR26740.
Reviewers: alexfh
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D17926
llvm-svn: 265117
diff --git a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
index 1269c3b..3927a78 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
@@ -16,6 +16,13 @@
namespace clang {
namespace tidy {
+namespace {
+bool isOverrideMethod(const FunctionDecl *Function) {
+ if (const auto *MD = dyn_cast<CXXMethodDecl>(Function))
+ return MD->size_overridden_methods() > 0 || MD->hasAttr<OverrideAttr>();
+ return false;
+}
+} // namespace
void UnusedParametersCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(functionDecl().bind("function"), this);
@@ -63,20 +70,15 @@
auto MyDiag = diag(Param->getLocation(), "parameter '%0' is unused")
<< Param->getName();
- auto UsedByRef = [&] {
- return !ast_matchers::match(
- decl(hasDescendant(
- declRefExpr(to(equalsNode(Function)),
- unless(hasAncestor(
- callExpr(callee(equalsNode(Function)))))))),
- *Result.Context->getTranslationUnitDecl(), *Result.Context)
- .empty();
- };
+ auto DeclRefExpr =
+ declRefExpr(to(equalsNode(Function)),
+ unless(hasAncestor(callExpr(callee(equalsNode(Function))))));
// Comment out parameter name for non-local functions.
if (Function->isExternallyVisible() ||
!Result.SourceManager->isInMainFile(Function->getLocation()) ||
- UsedByRef()) {
+ !ast_matchers::match(DeclRefExpr, *Result.Context).empty() ||
+ isOverrideMethod(Function)) {
SourceRange RemovalRange(Param->getLocation(), Param->getLocEnd());
// Note: We always add a space before the '/*' to not accidentally create a
// '*/*' for pointer types, which doesn't start a comment. clang-format will