Lines Matching defs:RD

62   RecordArgABI getRecordArgABI(const CXXRecordDecl *RD) const override;
99 std::vector<CharUnits> getVBPtrOffsets(const CXXRecordDecl *RD) override {
102 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
104 const VBTableGlobals &VBGlobals = enumerateVBTables(RD);
130 llvm::GlobalVariable *getMSCompleteObjectLocator(const CXXRecordDecl *RD,
177 bool canSpeculativelyEmitVTable(const CXXRecordDecl *RD) const override {
188 const CXXRecordDecl *RD) override;
194 const CXXRecordDecl *RD) override;
307 void emitVTableTypeMetadata(const VPtrInfo &Info, const CXXRecordDecl *RD,
311 const CXXRecordDecl *RD) override;
330 llvm::GlobalVariable *getAddrOfVTable(const CXXRecordDecl *RD,
350 void emitVirtualInheritanceTables(const CXXRecordDecl *RD) override;
353 getAddrOfVBTable(const VPtrInfo &VBT, const CXXRecordDecl *RD,
399 void emitVBTableDefinition(const VPtrInfo &VBT, const CXXRecordDecl *RD,
640 const CXXRecordDecl *RD, Address Base,
648 const CXXRecordDecl *RD,
655 /// - Initialize all vbptrs of 'this' with RD as the complete type.
656 void EmitVBPtrStores(CodeGenFunction &CGF, const CXXRecordDecl *RD);
659 const VBTableGlobals &enumerateVBTables(const CXXRecordDecl *RD);
665 llvm::Constant *EmitMemberDataPointer(const CXXRecordDecl *RD,
674 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
675 return RD->hasAttr<MSInheritanceAttr>();
806 const CXXRecordDecl *RD) override;
809 isPermittedToBeHomogeneousAggregate(const CXXRecordDecl *RD) const override;
855 MicrosoftCXXABI::getRecordArgABI(const CXXRecordDecl *RD) const {
859 if (RD->canPassInRegisters())
878 TypeInfo Info = getContext().getTypeInfo(RD->getTypeForDecl());
1106 static bool isTrivialForMSVC(const CXXRecordDecl *RD, QualType Ty,
1141 if (RD->hasProtectedFields() || RD->hasPrivateFields())
1143 if (RD->getNumBases() > 0)
1145 if (RD->isPolymorphic())
1147 if (RD->hasNonTrivialCopyAssignment())
1149 if (RD->needsImplicitCopyAssignment() && !RD->hasSimpleCopyAssignment())
1151 for (const Decl *D : RD->decls()) {
1163 if (RD->hasNonTrivialDestructor())
1169 const CXXRecordDecl *RD = FI.getReturnType()->getAsCXXRecordDecl();
1170 if (!RD)
1173 bool isTrivialForABI = RD->canPassInRegisters() &&
1174 isTrivialForMSVC(RD, FI.getReturnType(), CGM);
1199 const CXXRecordDecl *RD) {
1214 EmitVBPtrStores(CGF, RD);
1241 CodeGenFunction &CGF, const CXXRecordDecl *RD) {
1255 const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
1262 for (const CXXBaseSpecifier &S : RD->vbases()) {
1270 GetVirtualBaseClassOffset(CGF, getThisAddress(CGF), RD, VBase);
1273 // vtorDisp_for_vbase = vbptr[vbase_idx] - offsetof(RD, vbase).
1320 const CXXRecordDecl *RD) {
1324 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1326 const VBTableGlobals &VBGlobals = enumerateVBTables(RD);
1697 const CXXRecordDecl *RD,
1711 CGM.GetVCallVisibilityLevel(RD, Visited);
1726 CGM.AddVTableTypeMetadata(VTable, AddressPoint, RD);
1755 CGM.AddVTableTypeMetadata(VTable, AddressPoint, RD);
1759 const CXXRecordDecl *RD) {
1761 const VPtrInfoVector &VFPtrs = VFTContext.getVFPtrOffsets(RD);
1764 llvm::GlobalVariable *VTable = getAddrOfVTable(RD, Info->FullOffsetInMDC);
1769 VFTContext.getVFTableLayout(RD, Info->FullOffsetInMDC);
1774 RTTI = getMSCompleteObjectLocator(RD, *Info);
1782 emitVTableTypeMetadata(*Info, RD, VTable);
1803 const CXXRecordDecl *RD, const VPtrInfo &VFPtr,
1806 MangleContext.mangleCXXVFTable(RD, VFPtr.MangledPath, Out);
1817 llvm::GlobalVariable *MicrosoftCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
1823 VFTableIdTy ID(RD, VPtrOffset);
1833 const VPtrInfoVector &VFPtrs = VTContext.getVFPtrOffsets(RD);
1835 if (DeferredVFTables.insert(RD).second) {
1838 CGM.addDeferredVTable(RD);
1846 mangleVFTableName(getMangleContext(), RD, *VFPtrs[J], Name);
1864 mangleVFTableName(getMangleContext(), RD, *VFPtr, VFTableName);
1874 RD->hasAttr<DLLImportAttr>() ? llvm::GlobalValue::LinkOnceODRLinkage
1875 : CGM.getVTableLinkage(RD);
1893 VTContext.getVFTableLayout(RD, VFPtr->FullOffsetInMDC);
1945 if (RD->hasAttr<DLLExportAttr>())
2039 MicrosoftCXXABI::enumerateVBTables(const CXXRecordDecl *RD) {
2045 VBTablesMap.insert(std::make_pair(RD, VBTableGlobals()));
2051 VBGlobals.VBTables = &Context.enumerateVBTables(RD);
2055 llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
2059 VBGlobals.Globals.push_back(getAddrOfVBTable(**I, RD, Linkage));
2140 void MicrosoftCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
2141 const VBTableGlobals &VBGlobals = enumerateVBTables(RD);
2146 emitVBTableDefinition(*VBT, RD, GV);
2151 MicrosoftCXXABI::getAddrOfVBTable(const VPtrInfo &VBT, const CXXRecordDecl *RD,
2155 getMangleContext().mangleCXXVBTable(RD, VBT.MangledPath, Out);
2169 if (RD->hasAttr<DLLImportAttr>())
2171 else if (RD->hasAttr<DLLExportAttr>())
2175 emitVBTableDefinition(VBT, RD, GV);
2181 const CXXRecordDecl *RD,
2185 assert(RD->getNumVBases() && ObjectWithVPtr->getNumVBases() &&
2190 const ASTRecordLayout &DerivedLayout = getContext().getASTRecordLayout(RD);
2224 if (RD->hasAttr<DLLImportAttr>())
2790 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
2791 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2793 RD->nullFieldOffsetIsZero());
2798 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
2799 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2823 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
2824 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2829 if (RD->nullFieldOffsetIsZero())
2858 const CXXRecordDecl *RD,
2861 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2878 Offs = getContext().getASTRecordLayout(RD).getVBPtrOffset();
2895 llvm::Constant *MicrosoftCXXABI::EmitMemberDataPointer(const CXXRecordDecl *RD,
2897 if (RD->getMSInheritanceModel() ==
2899 offset -= getContext().getOffsetOfBaseWithVBPtr(RD);
2902 return EmitFullMemberPointer(FirstField, /*IsMemberFunction=*/false, RD,
2928 const CXXRecordDecl *RD = cast<CXXRecordDecl>(FD->getParent());
2929 RD = RD->getMostRecentNonInjectedDecl();
2930 C = EmitMemberDataPointer(RD, FieldOffset);
2974 const CXXRecordDecl *RD = MD->getParent()->getMostRecentNonInjectedDecl();
2999 VBTableIndex = VTableContext.getVBTableIndex(RD, ML.VBase) * 4;
3003 RD->getMSInheritanceModel() ==
3005 NonVirtualBaseAdjustment -= getContext().getOffsetOfBaseWithVBPtr(RD);
3008 return EmitFullMemberPointer(FirstField, /*IsMemberFunction=*/true, RD,
3038 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
3039 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
3176 CodeGenFunction &CGF, const Expr *E, const CXXRecordDecl *RD,
3199 // If we weren't given a dynamic vbptr offset, RD should be complete and we'll
3203 if (!RD->hasDefinition()) {
3209 Diags.Report(E->getExprLoc(), DiagID) << RD << E->getSourceRange();
3210 } else if (RD->getNumVBases())
3211 offs = getContext().getASTRecordLayout(RD).getVBPtrOffset();
3237 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
3238 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
3257 Addr = AdjustVirtualBase(CGF, E, RD, Base, VirtualBaseAdjustmentOffset,
3521 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
3524 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
3545 ThisPtrForCall = AdjustVirtualBase(CGF, E, RD, This,
3619 MSRTTIClass(const CXXRecordDecl *RD) : RD(RD) {}
3628 const CXXRecordDecl *RD, *VirtualRoot;
3644 VirtualRoot = RD;
3650 OffsetInVBase = Parent->OffsetInVBase + RD->getASTContext()
3651 .getASTRecordLayout(Parent->RD).getBaseClassOffset(RD).getQuantity();
3656 for (const CXXBaseSpecifier &Base : RD->bases()) {
3691 MSRTTIBuilder(MicrosoftCXXABI &ABI, const CXXRecordDecl *RD)
3693 VMContext(CGM.getLLVMContext()), Module(CGM.getModule()), RD(RD),
3694 Linkage(getLinkageForRTTI(CGM.getContext().getTagDeclType(RD))),
3707 const CXXRecordDecl *RD;
3717 const CXXRecordDecl *RD) {
3718 Classes.push_back(MSRTTIClass(RD));
3719 for (const CXXBaseSpecifier &Base : RD->bases())
3731 !VirtualBases.insert(Class->RD).second) {
3735 if (!UniqueBases.insert(Class->RD).second)
3736 AmbiguousBases.insert(Class->RD);
3742 if (AmbiguousBases.count(Class.RD))
3750 ABI.getMangleContext().mangleCXXRTTIClassHierarchyDescriptor(RD, Out);
3759 serializeClassHierarchy(Classes, RD);
3764 if (Class.RD->getNumBases() > 1)
3771 if ((Flags & HasBranchingHierarchy) && RD->getNumVBases() != 0)
3806 ABI.getMangleContext().mangleCXXRTTIBaseClassArray(RD, Out);
3842 OffsetInVBTable = VTableContext.getVBTableIndex(RD, Class.VirtualRoot) * 4;
3843 VBPtrOffset = Context.getASTRecordLayout(RD).getVBPtrOffset().getQuantity();
3850 Class.RD, Class.OffsetInVBase, VBPtrOffset, OffsetInVBTable,
3869 ABI.getAddrOfRTTIDescriptor(Context.getTypeDeclType(Class.RD))),
3876 MSRTTIBuilder(ABI, Class.RD).getClassHierarchyDescriptor()),
3887 ABI.getMangleContext().mangleCXXRTTICompleteObjectLocator(RD, Info.MangledPath, Out);
3899 if (Context.getASTRecordLayout(RD)
3916 CGM.GetAddrOfRTTIDescriptor(Context.getTypeDeclType(RD))),
4033 MicrosoftCXXABI::getMSCompleteObjectLocator(const CXXRecordDecl *RD,
4035 return MSRTTIBuilder(*this, RD).getCompleteObjectLocator(Info);
4085 const CXXRecordDecl *RD = CD->getParent();
4086 QualType RecordTy = getContext().getRecordType(RD);
4124 if (RD->getNumVBases() > 0)
4191 CXXRecordDecl *RD = T->getAsCXXRecordDecl();
4193 RD ? CGM.getContext().getCopyConstructorForExceptionObject(RD) : nullptr;
4226 bool IsScalar = !RD;
4232 if (const CXXRecordDecl *RD = PointeeType->getAsCXXRecordDecl()) {
4233 HasVirtualBases = RD->getNumVBases() > 0;
4234 if (IdentifierInfo *II = RD->getIdentifier())
4235 IsStdBadAlloc = II->isStr("bad_alloc") && RD->isInStdNamespace();
4322 QualType RTTITy = QualType(Class.RD->getTypeForDecl(), 0);
4427 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
4428 if (CXXDestructorDecl *DtorD = RD->getDestructor())
4473 const CXXRecordDecl *RD) {
4474 std::tie(This, std::ignore, RD) =
4475 performBaseAdjustment(CGF, This, QualType(RD->getTypeForDecl(), 0));
4476 return {CGF.GetVTablePtr(This, CGM.Int8PtrTy, RD), RD};
4480 const CXXRecordDecl *RD) const {
4489 if (RD->isEmpty())
4491 if (RD->isPolymorphic())
4493 if (RD->hasNonTrivialCopyAssignment())
4495 if (RD->hasNonTrivialDestructor())
4497 if (RD->hasNonTrivialDefaultConstructor())
4510 for (const CXXBaseSpecifier &B : RD->bases()) {