From: Richard Smith Date: Fri, 13 May 2016 18:48:05 +0000 (+0000) Subject: Use marginally more appropriate functions to detect if we should declare an X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8ef9f51d7cb741fdc3a8e5ca8dce9942ef89088f;p=clang Use marginally more appropriate functions to detect if we should declare an implicit copy constructor/assignment, and other minor cleanups. No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@269457 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 96c47e29ef..ee81bbc287 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -6463,7 +6463,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { ClassDecl->hasInheritedConstructor()) DeclareImplicitDefaultConstructor(ClassDecl); - if (!ClassDecl->hasUserDeclaredCopyConstructor()) { + if (ClassDecl->needsImplicitCopyConstructor()) { ++ASTContext::NumImplicitCopyConstructors; // If the properties or semantics of the copy constructor couldn't be @@ -6482,7 +6482,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { DeclareImplicitMoveConstructor(ClassDecl); } - if (!ClassDecl->hasUserDeclaredCopyAssignment()) { + if (ClassDecl->needsImplicitCopyAssignment()) { ++ASTContext::NumImplicitCopyAssignmentOperators; // If we have a dynamic class, then the copy assignment operator may be @@ -6505,7 +6505,7 @@ void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) { DeclareImplicitMoveAssignment(ClassDecl); } - if (!ClassDecl->hasUserDeclaredDestructor()) { + if (ClassDecl->needsImplicitDestructor()) { ++ASTContext::NumImplicitDestructors; // If we have a dynamic class, then the destructor may be virtual, so we @@ -8946,6 +8946,7 @@ void Sema::CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD) { if (auto *Acceptable = R.getAcceptableDecl(D)) R.addDecl(Acceptable); R.resolveKind(); + R.suppressDiagnostics(); CheckFunctionDeclaration(S, FD, R, /*IsExplicitSpecialization*/false); } diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index 75d9eecf56..647055f5f0 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -738,11 +738,11 @@ void Sema::ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class) { if (getLangOpts().CPlusPlus11) { // If the move constructor has not yet been declared, do so now. if (Class->needsImplicitMoveConstructor()) - DeclareImplicitMoveConstructor(Class); // might not actually do it + DeclareImplicitMoveConstructor(Class); // If the move assignment operator has not yet been declared, do so now. if (Class->needsImplicitMoveAssignment()) - DeclareImplicitMoveAssignment(Class); // might not actually do it + DeclareImplicitMoveAssignment(Class); } // If the destructor has not yet been declared, do so now.