[clang-tools-extra] r265117 - [clang-tidy] Don't delete unused parameter in class override method in anonymous namespace.

Haojian Wu via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 1 00:57:30 PDT 2016


Author: hokein
Date: Fri Apr  1 02:57:30 2016
New Revision: 265117

URL: http://llvm.org/viewvc/llvm-project?rev=265117&view=rev
Log:
[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

Modified:
    clang-tools-extra/trunk/clang-tidy/misc/UnusedParametersCheck.cpp
    clang-tools-extra/trunk/test/clang-tidy/misc-unused-parameters.cpp

Modified: clang-tools-extra/trunk/clang-tidy/misc/UnusedParametersCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/UnusedParametersCheck.cpp?rev=265117&r1=265116&r2=265117&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/UnusedParametersCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/UnusedParametersCheck.cpp Fri Apr  1 02:57:30 2016
@@ -16,6 +16,13 @@ using namespace clang::ast_matchers;
 
 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 @@ void UnusedParametersCheck::warnOnUnused
   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

Modified: clang-tools-extra/trunk/test/clang-tidy/misc-unused-parameters.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-unused-parameters.cpp?rev=265117&r1=265116&r2=265117&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-unused-parameters.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/misc-unused-parameters.cpp Fri Apr  1 02:57:30 2016
@@ -127,6 +127,16 @@ void someMoreCallSites() {
   useFunction(&C::h);
 }
 
+class Base {
+  virtual void f(int i);
+};
+
+class Derived : public Base {
+  void f(int i) override {}
+// CHECK-MESSAGES: :[[@LINE-1]]:14: warning
+// CHECK-FIXES: void f(int  /*i*/) override {}
+};
+
 } // end namespace
 
 template <typename T> void someFunctionTemplate(T b, T e) { (void)b; (void)e; }




More information about the cfe-commits mailing list