Home | History | Annotate | Download | only in Sema

Lines Matching refs:ClassDecl

2617 Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange,
2622 if (!classdecl)
2625 AdjustDeclIfTemplate(classdecl);
2626 CXXRecordDecl *Class = dyn_cast<CXXRecordDecl>(classdecl);
2795 void Sema::ActOnBaseSpecifiers(Decl *ClassDecl,
2797 if (!ClassDecl || Bases.empty())
2800 AdjustDeclIfTemplate(ClassDecl);
2801 AttachBaseSpecifiers(cast<CXXRecordDecl>(ClassDecl), Bases);
4040 CXXRecordDecl *ClassDecl,
4046 for (const auto &Base : ClassDecl->bases()) {
4064 if (SemaRef.IsDerivedFrom(ClassDecl->getLocation(),
4065 SemaRef.Context.getTypeDeclType(ClassDecl),
4120 explicit MemInitializerValidatorCCC(CXXRecordDecl *ClassDecl)
4121 : ClassDecl(ClassDecl) {}
4126 return Member->getDeclContext()->getRedeclContext()->Equals(ClassDecl);
4137 CXXRecordDecl *ClassDecl;
4142 ValueDecl *Sema::tryLookupCtorInitMemberDecl(CXXRecordDecl *ClassDecl,
4148 for (auto *D : ClassDecl->lookup(MemberOrBase))
4185 CXXRecordDecl *ClassDecl = Constructor->getParent();
4200 ClassDecl, SS, TemplateTypeTy, MemberOrBase)) {
4263 MemInitializerValidatorCCC CCC(ClassDecl);
4266 CCC, CTK_ErrorRecovery, ClassDecl))) {
4278 if (FindBaseInitializer(*this, ClassDecl,
4324 return BuildBaseInitializer(BaseType, TInfo, Init, ClassDecl, EllipsisLoc);
4405 CXXRecordDecl *ClassDecl) {
4422 QualType(ClassDecl->getTypeForDecl(), 0));
4462 Expr *Init, CXXRecordDecl *ClassDecl,
4501 if (Context.hasSameUnqualifiedType(QualType(ClassDecl->getTypeForDecl(),0),
4503 return BuildDelegatingInitializer(BaseTInfo, Init, ClassDecl);
4505 FindBaseInitializer(*this, ClassDecl, BaseType, DirectBaseSpec,
4518 if (ClassDecl->hasAnyDependentBases())
4522 << BaseType << Context.getTypeDeclType(ClassDecl)
5078 CXXRecordDecl *ClassDecl = Constructor->getParent()->getDefinition();
5079 if (!ClassDecl)
5109 for (auto &I : ClassDecl->bases()) {
5115 for (auto &VBase : ClassDecl->vbases()) {
5122 if (ClassDecl->isAbstract()) {
5126 << VBase.getType() << ClassDecl;
5127 DiagnoseAbstractType(ClassDecl);
5131 } else if (!AnyErrors && !ClassDecl->isAbstract()) {
5150 for (auto &Base : ClassDecl->bases()) {
5172 for (auto *Mem : ClassDecl->decls()) {
5198 assert(ClassDecl->hasFlexibleArrayMember() &&
5292 const CXXRecordDecl *ClassDecl = Constructor->getParent();
5295 for (const auto &VBase : ClassDecl->vbases())
5299 for (const auto &Base : ClassDecl->bases()) {
5306 for (auto *Field : ClassDecl->fields()) {
5532 CXXRecordDecl *ClassDecl) {
5535 if (ClassDecl->isDependentContext() || ClassDecl->isUnion())
5544 for (auto *Field : ClassDecl->fields()) {
5580 bool VisitVirtualBases = !ClassDecl->isAbstract();
5586 CXXDestructorDecl *Dtor = ClassDecl->getDestructor();
5594 for (const auto &Base : ClassDecl->bases()) {
5620 Context.getTypeDeclType(ClassDecl));
5627 MarkVirtualBaseDestructorsReferenced(Location, ClassDecl,
5632 SourceLocation Location, CXXRecordDecl *ClassDecl,
5635 for (const auto &VBase : ClassDecl->vbases()) {
5653 ClassDecl->getLocation(), Dtor,
5655 << Context.getTypeDeclType(ClassDecl) << VBase.getType(),
5656 Context.getTypeDeclType(ClassDecl)) ==
5659 Context.getTypeDeclType(ClassDecl), VBase.getType(),
5660 diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(),
7071 specialMemberIsConstexpr(Sema &S, CXXRecordDecl *ClassDecl,
7081 Inherited->findConstructorForBase(ClassDecl, InheritedCtor).first;
7087 return ClassDecl->hasConstexprDefaultConstructor();
7089 return ClassDecl->hasConstexprDestructor();
7092 lookupCallFromSpecialMember(S, ClassDecl, CSM, Quals, ConstRHS);
7103 Sema &S, CXXRecordDecl *ClassDecl, Sema::CXXSpecialMember CSM,
7122 return ClassDecl->defaultedDefaultConstructorIsConstexpr();
7138 return ClassDecl->defaultedDestructorIsConstexpr();
7151 if (Ctor && ClassDecl->isUnion())
7153 ? ClassDecl->hasInClassInitializer() ||
7154 !ClassDecl->hasVariantMembers()
7158 if (Ctor && ClassDecl->getNumVBases())
7163 if (!Ctor && !ClassDecl->isLiteral())
7170 for (const auto &B : ClassDecl->bases()) {
7187 for (const auto *F : ClassDecl->fields()) {
9984 void Sema::AddImplicitlyDeclaredMembersToClass(CXXRecordDecl *ClassDecl) {
9988 if (!ClassDecl->isDependentType()) {
9989 if (ClassDecl->needsImplicitDefaultConstructor()) {
9992 if (ClassDecl->hasInheritedConstructor())
9993 DeclareImplicitDefaultConstructor(ClassDecl);
9996 if (ClassDecl->needsImplicitCopyConstructor()) {
10002 if (ClassDecl->needsOverloadResolutionForCopyConstructor() ||
10003 ClassDecl->hasInheritedConstructor())
10004 DeclareImplicitCopyConstructor(ClassDecl);
10011 (ClassDecl->hasUserDeclaredMoveConstructor() ||
10012 ClassDecl->needsOverloadResolutionForMoveConstructor() ||
10013 ClassDecl->hasUserDeclaredMoveAssignment() ||
10014 ClassDecl->needsOverloadResolutionForMoveAssignment()))
10015 DeclareImplicitCopyConstructor(ClassDecl);
10019 ClassDecl->needsImplicitMoveConstructor()) {
10022 if (ClassDecl->needsOverloadResolutionForMoveConstructor() ||
10023 ClassDecl->hasInheritedConstructor())
10024 DeclareImplicitMoveConstructor(ClassDecl);
10027 if (ClassDecl->needsImplicitCopyAssignment()) {
10034 if (ClassDecl->isDynamicClass() ||
10035 ClassDecl->needsOverloadResolutionForCopyAssignment() ||
10036 ClassDecl->hasInheritedAssignment())
10037 DeclareImplicitCopyAssignment(ClassDecl);
10040 if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveAssignment()) {
10044 if (ClassDecl->isDynamicClass() ||
10045 ClassDecl->needsOverloadResolutionForMoveAssignment() ||
10046 ClassDecl->hasInheritedAssignment())
10047 DeclareImplicitMoveAssignment(ClassDecl);
10050 if (ClassDecl->needsImplicitDestructor()) {
10057 if (ClassDecl->isDynamicClass() ||
10058 ClassDecl->needsOverloadResolutionForDestructor())
10059 DeclareImplicitDestructor(ClassDecl);
10074 findImplicitlyDeclaredEqualityComparisons(Context, ClassDecl,
10077 DeclareImplicitEqualityComparison(ClassDecl, FD);
10316 CXXRecordDecl *ClassDecl
10318 if (!ClassDecl)
10331 QualType ClassTy = Context.getTagDeclType(ClassDecl);
10696 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Conversion->getDeclContext());
10707 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
12903 CXXRecordDecl *ClassDecl = MD->getParent();
12909 if (ClassDecl->isInvalidDecl())
12916 S.Context.getRecordType(ClassDecl),
13018 CXXRecordDecl *ClassDecl) {
13025 assert(ClassDecl->needsImplicitDefaultConstructor() &&
13028 DeclaringSpecialMember DSM(*this, ClassDecl, CXXDefaultConstructor);
13032 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
13038 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
13039 SourceLocation ClassLoc = ClassDecl->getLocation();
13044 Context, ClassDecl, ClassLoc, NameInfo, /*Type*/ QualType(),
13053 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXDefaultConstructor,
13063 DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
13068 Scope *S = getScopeForContext(ClassDecl);
13076 ClassDecl->addDecl(DefaultCon);
13090 CXXRecordDecl *ClassDecl = Constructor->getParent();
13091 assert(ClassDecl && "DefineImplicitDefaultConstructor - invalid constructor");
13099 MarkVTableUsed(CurrentLocation, ClassDecl);
13221 CXXRecordDecl *ClassDecl = Constructor->getParent();
13236 MarkVTableUsed(CurrentLocation, ClassDecl);
13300 CXXDestructorDecl *Sema::DeclareImplicitDestructor(CXXRecordDecl *ClassDecl) {
13305 assert(ClassDecl->needsImplicitDestructor());
13307 DeclaringSpecialMember DSM(*this, ClassDecl, CXXDestructor);
13311 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
13317 = Context.getCanonicalType(Context.getTypeDeclType(ClassDecl));
13318 SourceLocation ClassLoc = ClassDecl->getLocation();
13323 CXXDestructorDecl::Create(Context, ClassDecl, ClassLoc, NameInfo,
13332 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXDestructor,
13342 Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
13343 Destructor->setTrivialForCall(ClassDecl->hasAttr<TrivialABIAttr>() ||
13344 ClassDecl->hasTrivialDestructorForCall());
13349 Scope *S = getScopeForContext(ClassDecl);
13355 if (ClassDecl->isCompleteDefinition() &&
13362 ClassDecl->addDecl(Destructor);
13376 CXXRecordDecl *ClassDecl = Destructor->getParent();
13377 assert(ClassDecl && "DefineImplicitDestructor - invalid destructor");
13385 MarkVTableUsed(CurrentLocation, ClassDecl);
13414 CXXRecordDecl *ClassDecl = Destructor->getParent();
13417 assert(ClassDecl->getNumVBases() > 0 &&
13425 MarkVirtualBaseDestructorsReferenced(Destructor->getLocation(), ClassDecl);
13736 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RecordTy->getDecl());
13742 S.LookupQualifiedName(OpLookup, ClassDecl, false);
13928 CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
13933 assert(ClassDecl->needsImplicitCopyAssignment());
13935 DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyAssignment);
13939 QualType ArgType = Context.getTypeDeclType(ClassDecl);
13944 bool Const = ClassDecl->implicitCopyAssignmentHasConstParam();
13950 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
13957 SourceLocation ClassLoc = ClassDecl->getLocation();
13960 Context, ClassDecl, ClassLoc, NameInfo, QualType(),
13970 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXCopyAssignment,
13987 ClassDecl->needsOverloadResolutionForCopyAssignment()
13989 : ClassDecl->hasTrivialCopyAssignment());
13994 Scope *S = getScopeForContext(ClassDecl);
13998 ClassDecl->setImplicitCopyAssignmentIsDeleted();
14004 ClassDecl->addDecl(CopyAssignment);
14074 CXXRecordDecl *ClassDecl = CopyAssignOperator->getParent();
14075 if (ClassDecl->isInvalidDecl()) {
14131 for (auto &Base : ClassDecl->bases()) {
14170 for (auto *Field : ClassDecl->fields()) {
14183 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
14184 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
14193 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
14194 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
14206 assert(ClassDecl->hasFlexibleArrayMember() &&
14267 CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
14268 assert(ClassDecl->needsImplicitMoveAssignment());
14270 DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveAssignment);
14277 QualType ArgType = Context.getTypeDeclType(ClassDecl);
14284 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
14291 SourceLocation ClassLoc = ClassDecl->getLocation();
14294 Context, ClassDecl, ClassLoc, NameInfo, QualType(),
14304 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXMoveAssignment,
14324 ClassDecl->needsOverloadResolutionForMoveAssignment()
14326 : ClassDecl->hasTrivialMoveAssignment());
14331 Scope *S = getScopeForContext(ClassDecl);
14335 ClassDecl->setImplicitMoveAssignmentIsDeleted();
14341 ClassDecl->addDecl(MoveAssignment);
14441 CXXRecordDecl *ClassDecl = MoveAssignOperator->getParent();
14442 if (ClassDecl->isInvalidDecl()) {
14457 checkMoveAssignmentForRepeatedMove(*this, ClassDecl, CurrentLocation);
14492 for (auto &Base : ClassDecl->bases()) {
14540 for (auto *Field : ClassDecl->fields()) {
14553 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
14554 << Context.getTagDeclType(ClassDecl) << 0 << Field->getDeclName();
14563 Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign)
14564 << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();
14576 assert(ClassDecl->hasFlexibleArrayMember() &&
14642 CXXRecordDecl *ClassDecl) {
14646 assert(ClassDecl->needsImplicitCopyConstructor());
14648 DeclaringSpecialMember DSM(*this, ClassDecl, CXXCopyConstructor);
14652 QualType ClassType = Context.getTypeDeclType(ClassDecl);
14654 bool Const = ClassDecl->implicitCopyConstructorHasConstParam();
14664 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
14671 SourceLocation ClassLoc = ClassDecl->getLocation();
14677 Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/nullptr,
14687 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXCopyConstructor,
14704 ClassDecl->needsOverloadResolutionForCopyConstructor()
14706 : ClassDecl->hasTrivialCopyConstructor());
14709 ClassDecl->hasAttr<TrivialABIAttr>() ||
14710 (ClassDecl->needsOverloadResolutionForCopyConstructor()
14713 : ClassDecl->hasTrivialCopyConstructorForCall()));
14718 Scope *S = getScopeForContext(ClassDecl);
14722 ClassDecl->setImplicitCopyConstructorIsDeleted();
14728 ClassDecl->addDecl(CopyConstructor);
14743 CXXRecordDecl *ClassDecl = CopyConstructor->getParent();
14744 assert(ClassDecl && "DefineImplicitCopyConstructor - invalid constructor");
14752 MarkVTableUsed(CurrentLocation, ClassDecl);
14782 CXXRecordDecl *ClassDecl) {
14783 assert(ClassDecl->needsImplicitMoveConstructor());
14785 DeclaringSpecialMember DSM(*this, ClassDecl, CXXMoveConstructor);
14789 QualType ClassType = Context.getTypeDeclType(ClassDecl);
14797 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, ClassDecl,
14804 SourceLocation ClassLoc = ClassDecl->getLocation();
14811 Context, ClassDecl, ClassLoc, NameInfo, QualType(), /*TInfo=*/nullptr,
14821 inferCUDATargetForImplicitSpecialMember(ClassDecl, CXXMoveConstructor,
14838 ClassDecl->needsOverloadResolutionForMoveConstructor()
14840 : ClassDecl->hasTrivialMoveConstructor());
14843 ClassDecl->hasAttr<TrivialABIAttr>() ||
14844 (ClassDecl->needsOverloadResolutionForMoveConstructor()
14847 : ClassDecl->hasTrivialMoveConstructorForCall()));
14852 Scope *S = getScopeForContext(ClassDecl);
14856 ClassDecl->setImplicitMoveConstructorIsDeleted();
14862 ClassDecl->addDecl(MoveConstructor);
14877 CXXRecordDecl *ClassDecl = MoveConstructor->getParent();
14878 assert(ClassDecl && "DefineImplicitMoveConstructor - invalid constructor");
14886 MarkVTableUsed(CurrentLocation, ClassDecl);
15212 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
15213 if (ClassDecl->isInvalidDecl()) return;
15214 if (ClassDecl->hasIrrelevantDestructor()) return;
15215 if (ClassDecl->isDependentContext()) return;
15220 CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);