diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-04-30 16:31:28 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-04-30 16:31:28 +0000 |
commit | 121b1a1fa5534376d330357ad4d59618c0284167 (patch) | |
tree | 8f2bf5756490fb8408e558b66e195563b80284e9 | |
parent | b7be52343d711905c671c575c6d367c29edbfba8 (diff) | |
download | bcm5719-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.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx11-unused.cpp | 33 |
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; |