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);
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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits