parent
bd9c94d7af
commit
18eb69af79
|
@ -1842,9 +1842,9 @@ Sema::DeclPtrTy Sema::ActOnNamespaceAliasDef(Scope *S,
|
|||
|
||||
void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
|
||||
CXXConstructorDecl *Constructor) {
|
||||
if (!Constructor->isDefaultConstructor() ||
|
||||
!Constructor->isImplicit() || Constructor->isUsed())
|
||||
return;
|
||||
assert((Constructor->isImplicit() && Constructor->isDefaultConstructor() &&
|
||||
!Constructor->isUsed()) &&
|
||||
"DefineImplicitDefaultConstructor - call it for implicit default ctor");
|
||||
|
||||
CXXRecordDecl *ClassDecl
|
||||
= cast<CXXRecordDecl>(Constructor->getDeclContext());
|
||||
|
@ -1862,7 +1862,7 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
|
|||
if (CXXConstructorDecl *BaseCtor =
|
||||
BaseClassDecl->getDefaultConstructor(Context)) {
|
||||
if (BaseCtor->isImplicit())
|
||||
BaseCtor->setUsed();
|
||||
MarkDeclarationReferenced(CurrentLocation, BaseCtor);
|
||||
}
|
||||
else {
|
||||
Diag(CurrentLocation, diag::err_defining_default_ctor)
|
||||
|
@ -1887,7 +1887,7 @@ void Sema::DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
|
|||
if (CXXConstructorDecl *FieldCtor =
|
||||
FieldClassDecl->getDefaultConstructor(Context)) {
|
||||
if (FieldCtor->isImplicit())
|
||||
FieldCtor->setUsed();
|
||||
MarkDeclarationReferenced(CurrentLocation, FieldCtor);
|
||||
}
|
||||
else {
|
||||
Diag(CurrentLocation, diag::err_defining_default_ctor)
|
||||
|
|
|
@ -5462,9 +5462,13 @@ void Sema::MarkDeclarationReferenced(SourceLocation Loc, Decl *D) {
|
|||
|
||||
// Note that this declaration has been used.
|
||||
if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
DefineImplicitDefaultConstructor(Loc, Constructor);
|
||||
// FIXME: set the Used flag if it is determined that ctor is valid.
|
||||
Constructor->setUsed(true);
|
||||
if (Constructor->isImplicit() && Constructor->isDefaultConstructor()) {
|
||||
if (!Constructor->isUsed())
|
||||
DefineImplicitDefaultConstructor(Loc, Constructor);
|
||||
}
|
||||
// FIXME: more checking for other implicits go here.
|
||||
else
|
||||
Constructor->setUsed(true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue