diff options
author | Dávid Bolvanský <david.bolvansky@gmail.com> | 2019-11-23 23:57:17 +0100 |
---|---|---|
committer | Dávid Bolvanský <david.bolvansky@gmail.com> | 2019-11-23 23:57:17 +0100 |
commit | 9e260c12bce77c80aa4da64ac44874687c684580 (patch) | |
tree | 68d5f74c39c6ea67680761682e7eadc432c61006 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | bc2b380c0d39109a2c8ffea57dadcbbc885eb847 (diff) | |
download | bcm5719-llvm-9e260c12bce77c80aa4da64ac44874687c684580.tar.gz bcm5719-llvm-9e260c12bce77c80aa4da64ac44874687c684580.zip |
[Diagnostics] Make behaviour of Clang's -Wdeprecated-copy same as in GCC
Do not warn for functions that are explicitly marked delete or default, which follows the behavior of the GCC warning.
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index d7200185bdf..9c220efebe6 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -12406,7 +12406,8 @@ static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) { // In Microsoft mode, assignment operations don't affect constructors and // vice versa. - if (RD->hasUserDeclaredDestructor()) { + if (RD->hasUserDeclaredDestructor() && + RD->getDestructor()->isUserProvided()) { UserDeclaredOperation = RD->getDestructor(); } else if (!isa<CXXConstructorDecl>(CopyOp) && RD->hasUserDeclaredCopyConstructor() && @@ -12432,7 +12433,7 @@ static void diagnoseDeprecatedCopyOperation(Sema &S, CXXMethodDecl *CopyOp) { assert(UserDeclaredOperation); } - if (UserDeclaredOperation) { + if (UserDeclaredOperation && UserDeclaredOperation->isUserProvided()) { S.Diag(UserDeclaredOperation->getLocation(), isa<CXXDestructorDecl>(UserDeclaredOperation) ? diag::warn_deprecated_copy_dtor_operation |