Can't you just change your signature to virtual void a(int /* x */) {}
in these cases? On Tue, Aug 11, 2015 at 6:43 AM, Daniel Marjamäki < cfe-commits@lists.llvm.org> wrote: > danielmarjamaki created this revision. > danielmarjamaki added a reviewer: krememek. > danielmarjamaki added a subscriber: cfe-commits. > > Don't diagnose -Wunused-parameter in methods that override other methods > because the overridden methods might use the parameter > > Don't diagnose -Wunused-parameter in virtual methods because these might > be overriden by other methods that use the parameter. > > Such diagnostics could be more accurately written if they are based on > whole-program-analysis that establish if such parameter is unused in all > methods. > > > > http://reviews.llvm.org/D11940 > > Files: > lib/Sema/SemaDecl.cpp > test/SemaCXX/warn-unused-parameters.cpp > > Index: test/SemaCXX/warn-unused-parameters.cpp > =================================================================== > --- test/SemaCXX/warn-unused-parameters.cpp > +++ test/SemaCXX/warn-unused-parameters.cpp > @@ -32,3 +32,20 @@ > auto l = [&t...]() { return sizeof...(s); }; > return l(); > } > + > +// Don't diagnose virtual methods or methods that override base class > +// methods. > +class Base { > +public: > + virtual void f(int x); > +}; > + > +class Derived : public Base { > +public: > + // Don't warn in overridden methods. > + virtual void f(int x) {} > + > + // Don't warn in virtual methods. > + virtual void a(int x) {} > +}; > + > Index: lib/Sema/SemaDecl.cpp > =================================================================== > --- lib/Sema/SemaDecl.cpp > +++ lib/Sema/SemaDecl.cpp > @@ -10797,8 +10797,13 @@ > > if (!FD->isInvalidDecl()) { > // Don't diagnose unused parameters of defaulted or deleted > functions. > - if (!FD->isDeleted() && !FD->isDefaulted()) > - DiagnoseUnusedParameters(FD->param_begin(), FD->param_end()); > + if (!FD->isDeleted() && !FD->isDefaulted()) { > + // Don't diagnose unused parameters in virtual methods or > + // in methods that override base class methods. > + const auto MD = dyn_cast<CXXMethodDecl>(FD); > + if (!MD || (MD->size_overridden_methods() == 0U && > !MD->isVirtual())) > + DiagnoseUnusedParameters(FD->param_begin(), FD->param_end()); > + } > DiagnoseSizeOfParametersAndReturnValue(FD->param_begin(), > FD->param_end(), > FD->getReturnType(), FD); > > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits