parent
96b8fc664a
commit
4c8cb01b5a
|
@ -2478,9 +2478,7 @@ public:
|
||||||
|
|
||||||
bool SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
|
bool SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
|
||||||
CXXBaseOrMemberInitializer **Initializers,
|
CXXBaseOrMemberInitializer **Initializers,
|
||||||
unsigned NumInitializers,
|
unsigned NumInitializers, bool AnyErrors);
|
||||||
bool IsImplicitConstructor,
|
|
||||||
bool AnyErrors);
|
|
||||||
|
|
||||||
/// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
|
/// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
|
||||||
/// mark all the non-trivial destructors of its members and bases as
|
/// mark all the non-trivial destructors of its members and bases as
|
||||||
|
|
|
@ -1429,9 +1429,8 @@ bool
|
||||||
Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
|
Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
|
||||||
CXXBaseOrMemberInitializer **Initializers,
|
CXXBaseOrMemberInitializer **Initializers,
|
||||||
unsigned NumInitializers,
|
unsigned NumInitializers,
|
||||||
bool IsImplicitConstructor,
|
|
||||||
bool AnyErrors) {
|
bool AnyErrors) {
|
||||||
assert((Constructor->isImplicit() == IsImplicitConstructor));
|
// assert((Constructor->isImplicit() == IsImplicitConstructor));
|
||||||
|
|
||||||
// We need to build the initializer AST according to order of construction
|
// We need to build the initializer AST according to order of construction
|
||||||
// and not what user specified in the Initializers list.
|
// and not what user specified in the Initializers list.
|
||||||
|
@ -1630,14 +1629,14 @@ Sema::SetBaseOrMemberInitializers(CXXConstructorDecl *Constructor,
|
||||||
}
|
}
|
||||||
else if (FT->isReferenceType()) {
|
else if (FT->isReferenceType()) {
|
||||||
Diag(Constructor->getLocation(), diag::err_uninitialized_member_in_ctor)
|
Diag(Constructor->getLocation(), diag::err_uninitialized_member_in_ctor)
|
||||||
<< (int)IsImplicitConstructor << Context.getTagDeclType(ClassDecl)
|
<< (int)Constructor->isImplicit() << Context.getTagDeclType(ClassDecl)
|
||||||
<< 0 << (*Field)->getDeclName();
|
<< 0 << (*Field)->getDeclName();
|
||||||
Diag((*Field)->getLocation(), diag::note_declared_at);
|
Diag((*Field)->getLocation(), diag::note_declared_at);
|
||||||
HadError = true;
|
HadError = true;
|
||||||
}
|
}
|
||||||
else if (FT.isConstQualified()) {
|
else if (FT.isConstQualified()) {
|
||||||
Diag(Constructor->getLocation(), diag::err_uninitialized_member_in_ctor)
|
Diag(Constructor->getLocation(), diag::err_uninitialized_member_in_ctor)
|
||||||
<< (int)IsImplicitConstructor << Context.getTagDeclType(ClassDecl)
|
<< (int)Constructor->isImplicit() << Context.getTagDeclType(ClassDecl)
|
||||||
<< 1 << (*Field)->getDeclName();
|
<< 1 << (*Field)->getDeclName();
|
||||||
Diag((*Field)->getLocation(), diag::note_declared_at);
|
Diag((*Field)->getLocation(), diag::note_declared_at);
|
||||||
HadError = true;
|
HadError = true;
|
||||||
|
@ -1842,10 +1841,9 @@ void Sema::ActOnMemInitializers(DeclPtrTy ConstructorDecl,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetBaseOrMemberInitializers(Constructor, MemInits, NumMemInits,
|
|
||||||
/*IsImplicitConstructor=*/false, AnyErrors);
|
|
||||||
|
|
||||||
DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits);
|
DiagnoseBaseOrMemInitializerOrder(*this, Constructor, MemInits, NumMemInits);
|
||||||
|
|
||||||
|
SetBaseOrMemberInitializers(Constructor, MemInits, NumMemInits, AnyErrors);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1943,9 +1941,7 @@ void Sema::ActOnDefaultCtorInitializers(DeclPtrTy CDtorDecl) {
|
||||||
|
|
||||||
if (CXXConstructorDecl *Constructor
|
if (CXXConstructorDecl *Constructor
|
||||||
= dyn_cast<CXXConstructorDecl>(CDtorDecl.getAs<Decl>()))
|
= dyn_cast<CXXConstructorDecl>(CDtorDecl.getAs<Decl>()))
|
||||||
SetBaseOrMemberInitializers(Constructor, 0, 0,
|
SetBaseOrMemberInitializers(Constructor, 0, 0, /*AnyErrors=*/false);
|
||||||
/*IsImplicitConstructor=*/false,
|
|
||||||
/*AnyErrors=*/false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
|
bool Sema::RequireNonAbstractType(SourceLocation Loc, QualType T,
|
||||||
|
@ -3798,9 +3794,7 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
|
||||||
|
|
||||||
DeclContext *PreviousContext = CurContext;
|
DeclContext *PreviousContext = CurContext;
|
||||||
CurContext = Constructor;
|
CurContext = Constructor;
|
||||||
if (SetBaseOrMemberInitializers(Constructor, 0, 0,
|
if (SetBaseOrMemberInitializers(Constructor, 0, 0, /*AnyErrors=*/false)) {
|
||||||
/*IsImplicitConstructor=*/true,
|
|
||||||
/*AnyErrors=*/false)) {
|
|
||||||
Diag(CurrentLocation, diag::note_member_synthesized_at)
|
Diag(CurrentLocation, diag::note_member_synthesized_at)
|
||||||
<< CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
|
<< CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
|
||||||
Constructor->setInvalidDecl();
|
Constructor->setInvalidDecl();
|
||||||
|
|
Loading…
Reference in New Issue