summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-04-30 16:31:28 +0000
committerReid Kleckner <reid@kleckner.net>2014-04-30 16:31:28 +0000
commit121b1a1fa5534376d330357ad4d59618c0284167 (patch)
tree8f2bf5756490fb8408e558b66e195563b80284e9
parentb7be52343d711905c671c575c6d367c29edbfba8 (diff)
downloadbcm5719-llvm-121b1a1fa5534376d330357ad4d59618c0284167.tar.gz
bcm5719-llvm-121b1a1fa5534376d330357ad4d59618c0284167.zip
-Wunused-parameter: Don't fire on defaulted or deleted functions
Patch by Dinesh Dwivedi! Differential Revision: http://reviews.llvm.org/D3376 llvm-svn: 207672
-rw-r--r--clang/lib/Sema/SemaDecl.cpp4
-rw-r--r--clang/test/SemaCXX/cxx11-unused.cpp33
2 files changed, 36 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 42084210807..e9c3c39b132 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -9921,7 +9921,9 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
Diag(FD->getLocation(), diag::warn_pure_function_definition);
if (!FD->isInvalidDecl()) {
- DiagnoseUnusedParameters(FD->param_begin(), FD->param_end());
+ // Don't diagnose unused parameters of defaulted or deleted functions.
+ if (Body)
+ DiagnoseUnusedParameters(FD->param_begin(), FD->param_end());
DiagnoseSizeOfParametersAndReturnValue(FD->param_begin(), FD->param_end(),
FD->getReturnType(), FD);
diff --git a/clang/test/SemaCXX/cxx11-unused.cpp b/clang/test/SemaCXX/cxx11-unused.cpp
new file mode 100644
index 00000000000..1e25bd51572
--- /dev/null
+++ b/clang/test/SemaCXX/cxx11-unused.cpp
@@ -0,0 +1,33 @@
+// RUN: %clang_cc1 -std=c++11 -verify %s -Wunused-parameter
+
+// PR19303 : Make sure we don't get a unused expression warning for deleted and
+// defaulted functions
+
+// expected-no-diagnostics
+
+class A {
+public:
+ int x;
+ A() = default;
+ ~A() = default;
+ A(const A &other) = delete;
+
+ template <typename T>
+ void SetX(T x) {
+ this->x = x;
+ };
+
+ void SetX1(int x);
+};
+
+template <>
+void A::SetX(A x) = delete;
+
+class B {
+public:
+ B() = default;
+ ~B() = default;
+ B(const B &other);
+};
+
+B::B(const B &other) = default;
OpenPOWER on IntegriCloud