Home | History | Annotate | Download | only in Sema

Lines Matching refs:ClassDecl

1368 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
1373 if (!classdecl)
1376 AdjustDeclIfTemplate(classdecl);
1377 CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
1487 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl, CXXBaseSpecifier **Bases,
1489 if (!ClassDecl || !Bases || !NumBases)
1492 AdjustDeclIfTemplate(ClassDecl);
1493 AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases, NumBases);
2215 CXXRecordDecl *ClassDecl,
2222 = ClassDecl->bases_begin();
2223 Base != ClassDecl->bases_end(); ++Base) {
2241 if (SemaRef.IsDerivedFrom(SemaRef.Context.getTypeDeclType(ClassDecl),
2297 explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
2298 : ClassDecl(ClassDecl) {}
2303 return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
2310 CXXRecordDecl *ClassDecl;
2341 CXXRecordDecl *ClassDecl = Constructor->getParent();
2356 = ClassDecl->lookup(MemberOrBase);
2411 MemInitializerValidatorCCC Validator(ClassDecl);
2414 Validator, ClassDecl))) {
2431 if (FindBaseInitializer(*this, ClassDecl,
2475 return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
2618 CXXRecordDecl *ClassDecl) {
2635 QualType(ClassDecl->getTypeForDecl(), 0));
2674 Expr *Init, CXXRecordDecl *ClassDecl,
2713 if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
2715 return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
2717 FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
2730 if (ClassDecl->hasAnyDependentBases())
2734 << BaseType << Context.getTypeDeclType(ClassDecl)
3341 CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
3342 if (!ClassDecl)
3358 for (CXXRecordDecl::base_class_iterator I = ClassDecl->bases_begin(),
3359 E = ClassDecl->bases_end(); I != E; ++I) {
3365 for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3366 E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3374 if (ClassDecl->isAbstract()) {
3378 << VBase->getType() << ClassDecl;
3379 DiagnoseAbstractType(ClassDecl);
3383 } else if (!AnyErrors && !ClassDecl->isAbstract()) {
3402 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3403 E = ClassDecl->bases_end(); Base != E; ++Base) {
3425 for (DeclContext::decl_iterator Mem = ClassDecl->decls_begin(),
3426 MemEnd = ClassDecl->decls_end();
3453 assert(ClassDecl->hasFlexibleArrayMember() &&
3535 const CXXRecordDecl *ClassDecl = Constructor->getParent();
3539 ClassDecl->vbases_begin(),
3540 E = ClassDecl->vbases_end(); VBase != E; ++VBase)
3544 for (CXXRecordDecl::base_class_const_iterator Base = ClassDecl->bases_begin(),
3545 E = ClassDecl->bases_end(); Base != E; ++Base) {
3552 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
3553 E = ClassDecl->field_end(); Field != E; ++Field) {
3739 CXXRecordDecl *ClassDecl) {
3742 if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
3751 for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(),
3752 E = ClassDecl->field_end(); I != E; ++I) {
3790 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
3791 E = ClassDecl->bases_end(); Base != E; ++Base) {
3814 Context.getTypeDeclType(ClassDecl));
3821 for (CXXRecordDecl::base_class_iterator VBase = ClassDecl->vbases_begin(),
3822 E = ClassDecl->vbases_end(); VBase != E; ++VBase) {
3841 ClassDecl->getLocation(), Dtor,
3843 << Context.getTypeDeclType(ClassDecl) << VBase->getType(),
3844 Context.getTypeDeclType(ClassDecl)) ==
3847 Context.getTypeDeclType(ClassDecl), VBase->getType(),
3848 diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
4301 static bool specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4305 S.LookupSpecialMember(ClassDecl, CSM, ConstArg,
4316 static bool defaultedSpecialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
4333 return ClassDecl->defaultedDefaultConstructorIsConstexpr();
4360 if (Ctor && ClassDecl->isUnion())
4364 if (Ctor && ClassDecl->getNumVBases())
4369 if (!Ctor && !ClassDecl->isLiteral())
4376 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
4377 BEnd = ClassDecl->bases_end();
4394 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
4395 FEnd = ClassDecl->field_end();
5669 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
5670 if (!ClassDecl->hasUserDeclaredConstructor())
5673 if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
5679 if (ClassDecl->needsOverloadResolutionForCopyConstructor())
5680 DeclareImplicitCopyConstructor(ClassDecl);
5683 if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
5686 if (ClassDecl->needsOverloadResolutionForMoveConstructor())
5687 DeclareImplicitMoveConstructor(ClassDecl);
5690 if (!ClassDecl->hasUserDeclaredCopyAssignment()) {
5697 if (ClassDecl->isDynamicClass() ||
5698 ClassDecl->needsOverloadResolutionForCopyAssignment())
5699 DeclareImplicitCopyAssignment(ClassDecl);
5702 if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
5706 if (ClassDecl->isDynamicClass() ||
5707 ClassDecl->needsOverloadResolutionForMoveAssignment())
5708 DeclareImplicitMoveAssignment(ClassDecl);
5711 if (!ClassDecl->hasUserDeclaredDestructor()) {
5718 if (ClassDecl->isDynamicClass() ||
5719 ClassDecl->needsOverloadResolutionForDestructor())
5720 DeclareImplicitDestructor(ClassDecl);
5909 CXXRecordDecl *ClassDecl
5911 if (!ClassDecl)
5926 QualType ClassTy = Context.getTagDeclType(ClassDecl);
6181 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
6195 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7694 CXXRecordDecl *ClassDecl = MD->getParent();
7700 if (ClassDecl->isInvalidDecl())
7704 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7705 BEnd = ClassDecl->bases_end();
7721 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7722 BEnd = ClassDecl->vbases_end();
7735 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7736 FEnd = ClassDecl->field_end();
7776 CXXRecordDecl *ClassDecl = CD->getParent();
7781 if (ClassDecl->isInvalidDecl())
7793 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
7794 BEnd = ClassDecl->bases_end();
7810 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
7811 BEnd = ClassDecl->vbases_end();
7824 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
7825 FEnd = ClassDecl->field_end();
7876 CXXRecordDecl *ClassDecl) {
7883 assert(ClassDecl->needsImplicitDefaultConstructor() &&
7886 DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
7890 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
7896 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
7897 SourceLocation ClassLoc = ClassDecl->getLocation();
7902 Context, ClassDecl, ClassLoc, NameInfo, /*Type*/QualType(), /*TInfo=*/0,
7917 DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
7925 if (Scope *S = getScopeForContext(ClassDecl))
7927 ClassDecl->addDecl(DefaultCon);
7939 CXXRecordDecl *ClassDecl = Constructor->getParent();
7940 assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
7947 << CXXDefaultConstructor << Context.getTagDeclType(ClassDecl);
7956 MarkVTableUsed(CurrentLocation, ClassDecl);
8249 void Sema::DeclareInheritingConstructors(CXXRecordDecl *ClassDecl) {
8252 if (ClassDecl->isDependentContext())
8257 for (CXXRecordDecl::base_class_iterator BaseIt = ClassDecl->bases_begin(),
8258 BaseE = ClassDecl->bases_end();
8268 InheritingConstructorInfo ICI(*this, ClassDecl);
8275 CXXRecordDecl *ClassDecl = Constructor->getParent();
8285 << Context.getTagDeclType(ClassDecl);
8294 MarkVTableUsed(CurrentLocation, ClassDecl);
8304 CXXRecordDecl *ClassDecl = MD->getParent();
8310 if (ClassDecl->isInvalidDecl())
8314 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
8315 BEnd = ClassDecl->bases_end();
8326 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
8327 BEnd = ClassDecl->vbases_end();
8335 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
8336 FEnd = ClassDecl->field_end();
8347 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
8352 assert(ClassDecl->needsImplicitDestructor());
8354 DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
8360 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
8361 SourceLocation ClassLoc = ClassDecl->getLocation();
8366 = CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
8379 AddOverriddenMethods(ClassDecl, Destructor);
8383 Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
8392 if (Scope *S = getScopeForContext(ClassDecl))
8394 ClassDecl->addDecl(Destructor);
8405 CXXRecordDecl *ClassDecl = Destructor->getParent();
8406 assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
8419 << CXXDestructor << Context.getTagDeclType(ClassDecl);
8428 MarkVTableUsed(CurrentLocation, ClassDecl);
8460 void Sema::AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
8590 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
8596 S.LookupQualifiedName(OpLookup, ClassDecl, false);
8784 CXXRecordDecl *ClassDecl = MD->getParent();
8787 if (ClassDecl->isInvalidDecl())
8804 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
8805 BaseEnd = ClassDecl->bases_end();
8817 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
8818 BaseEnd = ClassDecl->vbases_end();
8827 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
8828 FieldEnd = ClassDecl->field_end();
8844 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
8849 assert(ClassDecl->needsImplicitCopyAssignment());
8851 DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
8855 QualType ArgType = Context.getTypeDeclType(ClassDecl);
8857 bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
8862 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
8869 SourceLocation ClassLoc = ClassDecl->getLocation();
8872 CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
8892 AddOverriddenMethods(ClassDecl, CopyAssignment);
8895 ClassDecl->needsOverloadResolutionForCopyAssignment()
8897 : ClassDecl->hasTrivialCopyAssignment());
8910 if (Scope *S = getScopeForContext(ClassDecl))
8912 ClassDecl->addDecl(CopyAssignment);
8978 CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
8980 if (ClassDecl->isInvalidDecl() || CopyAssignOperator->isInvalidDecl()) {
9033 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9034 E = ClassDecl->bases_end(); Base != E; ++Base) {
9070 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9080 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9081 FieldEnd = ClassDecl->field_end();
9093 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9094 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9097 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9105 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9106 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9109 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9120 assert(ClassDecl->hasFlexibleArrayMember() &&
9149 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9170 << CXXCopyAssignment << Context.getTagDeclType(ClassDecl);
9197 CXXRecordDecl *ClassDecl = MD->getParent();
9200 if (ClassDecl->isInvalidDecl())
9215 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9216 BaseEnd = ClassDecl->bases_end();
9228 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9229 BaseEnd = ClassDecl->vbases_end();
9238 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9239 FieldEnd = ClassDecl->field_end();
9258 hasVirtualBaseWithNonTrivialMoveAssignment(Sema &S, CXXRecordDecl *ClassDecl) {
9259 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9260 BaseEnd = ClassDecl->vbases_end();
9286 CXXRecordDecl *ClassDecl = Type->getAsCXXRecordDecl();
9287 if (!ClassDecl || !ClassDecl->getDefinition() || ClassDecl->isInvalidDecl())
9296 if (ClassDecl->needsImplicitMoveConstructor())
9297 S.DeclareImplicitMoveConstructor(ClassDecl);
9298 return ClassDecl->hasMoveConstructor();
9303 if (ClassDecl->needsImplicitMoveAssignment())
9304 S.DeclareImplicitMoveAssignment(ClassDecl);
9305 return ClassDecl->hasMoveAssignment();
9309 /// of class \p ClassDecl have either a move operation, or are trivially
9311 static bool subobjectsHaveMoveOrTrivialCopy(Sema &S, CXXRecordDecl *ClassDecl,
9313 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9314 BaseEnd = ClassDecl->bases_end();
9323 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9324 BaseEnd = ClassDecl->vbases_end();
9330 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9331 FieldEnd = ClassDecl->field_end();
9340 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
9347 assert(ClassDecl->needsImplicitMoveAssignment());
9349 DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
9363 if (hasVirtualBaseWithNonTrivialMoveAssignment(*this, ClassDecl) ||
9364 !subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl,/*Constructor*/false)) {
9365 ClassDecl->setFailedImplicitMoveAssignment();
9372 QualType ArgType = Context.getTypeDeclType(ClassDecl);
9376 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9383 SourceLocation ClassLoc = ClassDecl->getLocation();
9386 CXXMethodDecl::Create(Context, ClassDecl, ClassLoc, NameInfo, QualType(),
9406 AddOverriddenMethods(ClassDecl, MoveAssignment);
9409 ClassDecl->needsOverloadResolutionForMoveAssignment()
9411 : ClassDecl->hasTrivialMoveAssignment());
9423 ClassDecl->setFailedImplicitMoveAssignment();
9430 if (Scope *S = getScopeForContext(ClassDecl))
9432 ClassDecl->addDecl(MoveAssignment);
9446 CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
9448 if (ClassDecl->isInvalidDecl() || MoveAssignOperator->isInvalidDecl()) {
9493 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9494 E = ClassDecl->bases_end(); Base != E; ++Base) {
9529 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9539 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9540 FieldEnd = ClassDecl->field_end();
9552 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9553 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
9556 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9564 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
9565 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
9568 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9579 assert(ClassDecl->hasFlexibleArrayMember() &&
9612 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9633 << CXXMoveAssignment << Context.getTagDeclType(ClassDecl);
9660 CXXRecordDecl *ClassDecl = MD->getParent();
9663 if (ClassDecl->isInvalidDecl())
9673 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
9674 BaseEnd = ClassDecl->bases_end();
9687 for (CXXRecordDecl::base_class_iterator Base = ClassDecl->vbases_begin(),
9688 BaseEnd = ClassDecl->vbases_end();
9697 for (CXXRecordDecl::field_iterator Field = ClassDecl->field_begin(),
9698 FieldEnd = ClassDecl->field_end();
9714 CXXRecordDecl *ClassDecl) {
9718 assert(ClassDecl->needsImplicitCopyConstructor());
9720 DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
9724 QualType ClassType = Context.getTypeDeclType(ClassDecl);
9726 bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
9731 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9738 SourceLocation ClassLoc = ClassDecl->getLocation();
9744 Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9766 ClassDecl->needsOverloadResolutionForCopyConstructor()
9768 : ClassDecl->hasTrivialCopyConstructor());
9781 if (Scope *S = getScopeForContext(ClassDecl))
9783 ClassDecl->addDecl(CopyConstructor);
9796 CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
9797 assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
9812 << CXXCopyConstructor << Context.getTagDeclType(ClassDecl);
9831 CXXRecordDecl *ClassDecl = MD->getParent();
9837 if (ClassDecl->isInvalidDecl())
9841 for (CXXRecordDecl::base_class_iterator B = ClassDecl->bases_begin(),
9842 BEnd = ClassDecl->bases_end();
9859 for (CXXRecordDecl::base_class_iterator B = ClassDecl->vbases_begin(),
9860 BEnd = ClassDecl->vbases_end();
9874 for (RecordDecl::field_iterator F = ClassDecl->field_begin(),
9875 FEnd = ClassDecl->field_end();
9895 CXXRecordDecl *ClassDecl) {
9901 assert(ClassDecl->needsImplicitMoveConstructor());
9903 DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
9914 if (!subobjectsHaveMoveOrTrivialCopy(*this, ClassDecl, /*Constructor*/true)) {
9915 ClassDecl->setFailedImplicitMoveConstructor();
9919 QualType ClassType = Context.getTypeDeclType(ClassDecl);
9922 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
9929 SourceLocation ClassLoc = ClassDecl->getLocation();
9936 Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/0,
9958 ClassDecl->needsOverloadResolutionForMoveConstructor()
9960 : ClassDecl->hasTrivialMoveConstructor());
9970 ClassDecl->setFailedImplicitMoveConstructor();
9977 if (Scope *S = getScopeForContext(ClassDecl))
9979 ClassDecl->addDecl(MoveConstructor);
9992 CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
9993 assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
10001 << CXXMoveConstructor << Context.getTagDeclType(ClassDecl);
10199 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
10200 if (ClassDecl->isInvalidDecl()) return;
10201 if (ClassDecl->hasIrrelevantDestructor()) return;
10202 if (ClassDecl->isDependentContext()) return;
10204 CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);