The last of the trivial constructor changes, make CXXSpecialMember
reflect our new, more accurate AST. llvm-svn: 131114
This commit is contained in:
parent
2f019ed2e6
commit
be3f9ecd18
|
@ -1105,7 +1105,7 @@ public:
|
|||
|
||||
enum CXXSpecialMember {
|
||||
CXXInvalid = -1,
|
||||
CXXConstructor = 0,
|
||||
CXXDefaultConstructor = 0,
|
||||
CXXCopyConstructor = 1,
|
||||
CXXCopyAssignment = 2,
|
||||
CXXDestructor = 3
|
||||
|
|
|
@ -1508,15 +1508,18 @@ Sema::CXXSpecialMember Sema::getSpecialMember(const CXXMethodDecl *MD) {
|
|||
if (Ctor->isCopyConstructor())
|
||||
return Sema::CXXCopyConstructor;
|
||||
|
||||
return Sema::CXXConstructor;
|
||||
if (Ctor->isDefaultConstructor())
|
||||
return Sema::CXXDefaultConstructor;
|
||||
}
|
||||
|
||||
if (isa<CXXDestructorDecl>(MD))
|
||||
return Sema::CXXDestructor;
|
||||
|
||||
assert(MD->isCopyAssignmentOperator() &&
|
||||
"Must have copy assignment operator");
|
||||
return Sema::CXXCopyAssignment;
|
||||
if (MD->isCopyAssignmentOperator())
|
||||
return Sema::CXXCopyAssignment;
|
||||
|
||||
llvm_unreachable("getSpecialMember on non-special member");
|
||||
return Sema::CXXInvalid;
|
||||
}
|
||||
|
||||
/// canRedefineFunction - checks if a function can be redefined. Currently,
|
||||
|
@ -7670,7 +7673,7 @@ bool Sema::CheckNontrivialField(FieldDecl *FD) {
|
|||
if (!RDecl->hasTrivialCopyConstructor())
|
||||
member = CXXCopyConstructor;
|
||||
else if (!RDecl->hasTrivialDefaultConstructor())
|
||||
member = CXXConstructor;
|
||||
member = CXXDefaultConstructor;
|
||||
else if (!RDecl->hasTrivialCopyAssignment())
|
||||
member = CXXCopyAssignment;
|
||||
else if (!RDecl->hasTrivialDestructor())
|
||||
|
@ -7699,7 +7702,7 @@ void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) {
|
|||
case CXXInvalid:
|
||||
break;
|
||||
|
||||
case CXXConstructor:
|
||||
case CXXDefaultConstructor:
|
||||
if (RD->hasUserDeclaredConstructor()) {
|
||||
typedef CXXRecordDecl::ctor_iterator ctor_iter;
|
||||
for (ctor_iter ci = RD->ctor_begin(), ce = RD->ctor_end(); ci != ce;++ci){
|
||||
|
@ -7773,7 +7776,7 @@ void Sema::DiagnoseNontrivial(const RecordType* T, CXXSpecialMember member) {
|
|||
|
||||
bool (CXXRecordDecl::*hasTrivial)() const;
|
||||
switch (member) {
|
||||
case CXXConstructor:
|
||||
case CXXDefaultConstructor:
|
||||
hasTrivial = &CXXRecordDecl::hasTrivialDefaultConstructor; break;
|
||||
case CXXCopyConstructor:
|
||||
hasTrivial = &CXXRecordDecl::hasTrivialCopyConstructor; break;
|
||||
|
|
|
@ -5091,7 +5091,7 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
|
|||
if (SetCtorInitializers(Constructor, 0, 0, /*AnyErrors=*/false) ||
|
||||
Trap.hasErrorOccurred()) {
|
||||
Diag(CurrentLocation, diag::note_member_synthesized_at)
|
||||
<< CXXConstructor << Context.getTagDeclType(ClassDecl);
|
||||
<< CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
|
||||
Constructor->setInvalidDecl();
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue