Home | History | Annotate | Download | only in Sema

Lines Matching defs:ClassDecl

1098 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1102 if (!classdecl)
1105 AdjustDeclIfTemplate(classdecl);
1106 CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1187 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1189 if (!ClassDecl || !Bases || !NumBases)
1192 AdjustDeclIfTemplate(ClassDecl);
1193 AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl),
1694 CXXRecordDecl *ClassDecl,
1701 = ClassDecl->bases_begin();
1702 Base != ClassDecl->bases_end(); ++Base) {
1720 if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
1776 explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
1777 : ClassDecl(ClassDecl) {}
1782 return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
1790 CXXRecordDecl *ClassDecl;
1821 CXXRecordDecl *ClassDecl = Constructor->getParent();
1836 = ClassDecl->lookup(MemberOrBase);
1891 MemInitializerValidatorCCC Validator(ClassDecl);
1894 Validator, ClassDecl))) {
1911 if (FindBaseInitializer(*this, ClassDecl,
1955 return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2195 CXXRecordDecl *ClassDecl) {
2214 QualType(ClassDecl->getTypeForDecl(), 0));
2245 Expr *Init, CXXRecordDecl *ClassDecl,
2284 if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2286 return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2288 FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2301 if (ClassDecl->hasAnyDependentBases())
2305 << BaseType << Context.getTypeDeclType(ClassDecl)
2875 CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
2876 if (!ClassDecl)
2892 for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
2893 E = ClassDecl->bases_end(); I != E; ++I) {
2899 for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
2900 E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
2920 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
2921 E = ClassDecl->bases_end(); Base != E; ++Base) {
2943 for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
2944 MemEnd = ClassDecl->decls_end();
2971 assert(ClassDecl->hasFlexibleArrayMember() &&
3070 const CXXRecordDecl *ClassDecl = Constructor->getParent();
3074 ClassDecl->vbases_begin(),
3075 E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3079 for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3080 E = ClassDecl->bases_end(); Base != E; ++Base) {
3087 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3088 E = ClassDecl->field_end(); Field != E; ++Field) {
3278 CXXRecordDecl *ClassDecl) {
3281 if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3290 for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3291 E = ClassDecl->field_end(); I != E; ++I) {
3329 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3330 E = ClassDecl->bases_end(); Base != E; ++Base) {
3353 Context.getTypeDeclType(ClassDecl));
3360 for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3361 E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3379 CheckDestructorAccess(ClassDecl->getLocation(), Dtor,
3382 Context.getTypeDeclType(ClassDecl));
4867 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
4868 if (!ClassDecl->hasUserDeclaredConstructor())
4871 if (!ClassDecl->hasUserDeclaredCopyConstructor())
4874 if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveConstructor())
4877 if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
4884 if (ClassDecl->isDynamicClass())
4885 DeclareImplicitCopyAssignment(ClassDecl);
4888 if (getLangOpts().CPlusPlus0x && ClassDecl->needsImplicitMoveAssignment()) {
4892 if (ClassDecl->isDynamicClass())
4893 DeclareImplicitMoveAssignment(ClassDecl);
4896 if (!ClassDecl->hasUserDeclaredDestructor()) {
4903 if (ClassDecl->isDynamicClass())
4904 DeclareImplicitDestructor(ClassDecl);
5094 CXXRecordDecl *ClassDecl
5096 if (!ClassDecl)
5111 QualType ClassTy = Context.getTagDeclType(ClassDecl);
5366 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
5380 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6817 Sema::ComputeDefaultedDefaultCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
6822 if (ClassDecl->isInvalidDecl())
6826 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
6827 BEnd = ClassDecl->bases_end();
6843 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
6844 BEnd = ClassDecl->vbases_end();
6857 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
6858 FEnd = ClassDecl->field_end();
6883 CXXRecordDecl *ClassDecl) {
6890 assert(!ClassDecl->hasUserDeclaredConstructor() &&
6894 ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
6899 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
6900 SourceLocation ClassLoc = ClassDecl->getLocation();
6905 Context, ClassDecl, ClassLoc, NameInfo,
6908 /*isConstexpr=*/ClassDecl->defaultedDefaultConstructorIsConstexpr() &&
6913 DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
6918 if (Scope *S = getScopeForContext(ClassDecl))
6920 ClassDecl->addDecl(DefaultCon);
6935 CXXRecordDecl *ClassDecl = Constructor->getParent();
6936 assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
6943 << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
6952 MarkVTableUsed(CurrentLocation, ClassDecl);
6987 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(D);
6989 = getDefaultedDefaultConstructorUnsafe(*this, ClassDecl);
6999 ComputeDefaultedDefaultCtorExceptionSpec(ClassDecl);
7009 !ClassDecl->isDependentType())
7013 void Sema::DeclareInheritedConstructors(CXXRecordDecl *ClassDecl) {
7019 for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
7020 BaseE = ClassDecl->bases_end();
7042 for (CXXRecordDecl::ctor_iterator CtorIt = ClassDecl->ctor_begin(),
7043 CtorE = ClassDecl->ctor_end();
7051 ClassDecl->getTypeForDecl()->getCanonicalTypeUnqualified());
7077 ClassDecl->getLocation();
7165 Context, ClassDecl, UsingLoc, DNI, QualType(NewCtorType, 0),
7186 ClassDecl->addDecl(NewCtor);
7194 Sema::ComputeDefaultedDtorExceptionSpec(CXXRecordDecl *ClassDecl) {
7199 if (ClassDecl->isInvalidDecl())
7203 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7204 BEnd = ClassDecl->bases_end();
7215 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7216 BEnd = ClassDecl->vbases_end();
7224 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7225 FEnd = ClassDecl->field_end();
7236 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
7243 ComputeDefaultedDtorExceptionSpec(ClassDecl);
7250 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7251 SourceLocation ClassLoc = ClassDecl->getLocation();
7256 = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, Ty, 0,
7262 Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
7268 if (Scope *S = getScopeForContext(ClassDecl))
7270 ClassDecl->addDecl(Destructor);
7275 AddOverriddenMethods(ClassDecl, Destructor);
7289 CXXRecordDecl *ClassDecl = Destructor->getParent();
7290 assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
7303 << CXXDestructor << Context.getTagDeclType(ClassDecl);
7313 MarkVTableUsed(CurrentLocation, ClassDecl);
7320 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *classDecl,
7332 ComputeDefaultedDtorExceptionSpec(classDecl);
7391 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
7397 S.LookupQualifiedName(OpLookup, ClassDecl, false);
7552 CXXRecordDecl *ClassDecl) {
7553 if (ClassDecl->isInvalidDecl())
7570 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7571 BaseEnd = ClassDecl->bases_end();
7586 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7587 BaseEnd = ClassDecl->vbases_end();
7601 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7602 FieldEnd = ClassDecl->field_end();
7629 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7630 BaseEnd = ClassDecl->bases_end();
7642 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
7643 BaseEnd = ClassDecl->vbases_end();
7652 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7653 FieldEnd = ClassDecl->field_end();
7667 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
7676 ComputeDefaultedCopyAssignmentExceptionSpecAndConst(ClassDecl);
7678 QualType ArgType = Context.getTypeDeclType(ClassDecl);
7688 SourceLocation ClassLoc = ClassDecl->getLocation();
7691 = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
7700 CopyAssignment->setTrivial(ClassDecl->hasTrivialCopyAssignment());
7713 if (Scope *S = getScopeForContext(ClassDecl))
7715 ClassDecl->addDecl(CopyAssignment);
7725 AddOverriddenMethods(ClassDecl, CopyAssignment);
7738 CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
7740 if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
7786 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
7787 E = ClassDecl->bases_end(); Base != E; ++Base) {
7823 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7838 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
7839 FieldEnd = ClassDecl->field_end();
7846 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7847 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
7850 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7858 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
7859 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
7862 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
7873 assert(ClassDecl->hasFlexibleArrayMember() &&
7992 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
8013 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
8039 Sema::ComputeDefaultedMoveAssignmentExceptionSpec(CXXRecordDecl *ClassDecl) {
8042 if (ClassDecl->isInvalidDecl())
8057 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8058 BaseEnd = ClassDecl->bases_end();
8070 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8071 BaseEnd = ClassDecl->vbases_end();
8080 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8081 FieldEnd = ClassDecl->field_end();
8098 hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
8099 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8100 BaseEnd = ClassDecl->vbases_end();
8129 CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
8130 if (!ClassDecl)
8137 if (ClassDecl->needsImplicitMoveConstructor())
8138 S.DeclareImplicitMoveConstructor(ClassDecl);
8139 return ClassDecl->hasDeclaredMoveConstructor();
8142 if (ClassDecl->needsImplicitMoveAssignment())
8143 S.DeclareImplicitMoveAssignment(ClassDecl);
8144 return ClassDecl->hasDeclaredMoveAssignment();
8148 /// of class \p ClassDecl have either a move operation, or are trivially
8150 static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
8152 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8153 BaseEnd = ClassDecl->bases_end();
8162 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8163 BaseEnd = ClassDecl->vbases_end();
8169 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8170 FieldEnd = ClassDecl->field_end();
8179 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
8186 assert(ClassDecl->needsImplicitMoveAssignment());
8198 if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
8199 !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
8200 ClassDecl->setFailedImplicitMoveAssignment();
8208 ComputeDefaultedMoveAssignmentExceptionSpec(ClassDecl));
8210 QualType ArgType = Context.getTypeDeclType(ClassDecl);
8218 SourceLocation ClassLoc = ClassDecl->getLocation();
8221 = CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8231 MoveAssignment->setTrivial(ClassDecl->hasTrivialMoveAssignment());
8254 ClassDecl->setFailedImplicitMoveAssignment();
8258 if (Scope *S = getScopeForContext(ClassDecl))
8260 ClassDecl->addDecl(MoveAssignment);
8262 AddOverriddenMethods(ClassDecl, MoveAssignment);
8275 CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
8277 if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
8322 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8323 E = ClassDecl->bases_end(); Base != E; ++Base) {
8358 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8373 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8374 FieldEnd = ClassDecl->field_end();
8381 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
8382 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
8385 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8393 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
8394 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
8397 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8408 assert(ClassDecl->hasFlexibleArrayMember() &&
8537 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8558 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
8584 Sema::ComputeDefaultedCopyCtorExceptionSpecAndConst(CXXRecordDecl *ClassDecl) {
8585 if (ClassDecl->isInvalidDecl())
8601 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8602 BaseEnd = ClassDecl->bases_end();
8615 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8616 BaseEnd = ClassDecl->vbases_end();
8629 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8630 FieldEnd = ClassDecl->field_end();
8649 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8650 BaseEnd = ClassDecl->bases_end();
8663 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8664 BaseEnd = ClassDecl->vbases_end();
8673 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8674 FieldEnd = ClassDecl->field_end();
8689 CXXRecordDecl *ClassDecl) {
8697 ComputeDefaultedCopyCtorExceptionSpecAndConst(ClassDecl);
8699 QualType ClassType = Context.getTypeDeclType(ClassDecl);
8710 SourceLocation ClassLoc = ClassDecl->getLocation();
8716 Context, ClassDecl, ClassLoc, NameInfo,
8719 /*isConstexpr=*/ClassDecl->defaultedCopyConstructorIsConstexpr() &&
8723 CopyConstructor->setTrivial(ClassDecl->hasTrivialCopyConstructor());
8737 if (Scope *S = getScopeForContext(ClassDecl))
8739 ClassDecl->addDecl(CopyConstructor);
8760 CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
8761 ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
8769 << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
8788 Sema::ComputeDefaultedMoveCtorExceptionSpec(CXXRecordDecl *ClassDecl) {
8793 if (ClassDecl->isInvalidDecl())
8797 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8798 BEnd = ClassDecl->bases_end();
8814 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8815 BEnd = ClassDecl->vbases_end();
8828 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8829 FEnd = ClassDecl->field_end();
8849 CXXRecordDecl *ClassDecl) {
8855 assert(ClassDecl->needsImplicitMoveConstructor());
8864 if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
8865 ClassDecl->setFailedImplicitMoveConstructor();
8870 ComputeDefaultedMoveCtorExceptionSpec(ClassDecl));
8872 QualType ClassType = Context.getTypeDeclType(ClassDecl);
8880 SourceLocation ClassLoc = ClassDecl->getLocation();
8887 Context, ClassDecl, ClassLoc, NameInfo,
8890 /*isConstexpr=*/ClassDecl->defaultedMoveConstructorIsConstexpr() &&
8894 MoveConstructor->setTrivial(ClassDecl->hasTrivialMoveConstructor());
8913 ClassDecl->setFailedImplicitMoveConstructor();
8920 if (Scope *S = getScopeForContext(ClassDecl))
8922 ClassDecl->addDecl(MoveConstructor);
8935 CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
8936 assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
8944 << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
9174 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
9175 if (ClassDecl->isInvalidDecl()) return;
9176 if (ClassDecl->hasIrrelevantDestructor()) return;
9177 if (ClassDecl->isDependentContext()) return;
9179 CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);