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; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits