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,
351 void emitVirtualInheritanceTables(const CXXRecordDecl *RD) override;
354 getAddrOfVBTable(const VPtrInfo &VBT, const CXXRecordDecl *RD,
400 void emitVBTableDefinition(const VPtrInfo &VBT, const CXXRecordDecl *RD,
635 const CXXRecordDecl *RD, Address Base,
643 const CXXRecordDecl *RD,
650 /// - Initialize all vbptrs of 'this' with RD as the complete type.
651 void EmitVBPtrStores(CodeGenFunction &CGF, const CXXRecordDecl *RD);
654 const VBTableGlobals &enumerateVBTables(const CXXRecordDecl *RD);
660 llvm::Constant *EmitMemberDataPointer(const CXXRecordDecl *RD,
669 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
670 return RD->hasAttr<MSInheritanceAttr>();
800 const CXXRecordDecl *RD) override;
803 isPermittedToBeHomogeneousAggregate(const CXXRecordDecl *RD) const override;
849 MicrosoftCXXABI::getRecordArgABI(const CXXRecordDecl *RD) const {
853 if (RD->canPassInRegisters())
872 TypeInfo Info = getContext().getTypeInfo(RD->getTypeForDecl());
1100 static bool isTrivialForMSVC(const CXXRecordDecl *RD, QualType Ty,
1135 if (RD->hasProtectedFields() || RD->hasPrivateFields())
1137 if (RD->getNumBases() > 0)
1139 if (RD->isPolymorphic())
1141 if (RD->hasNonTrivialCopyAssignment())
1143 if (RD->needsImplicitCopyAssignment() && !RD->hasSimpleCopyAssignment())
1145 for (const Decl *D : RD->decls()) {
1157 if (RD->hasNonTrivialDestructor())
1163 const CXXRecordDecl *RD = FI.getReturnType()->getAsCXXRecordDecl();
1164 if (!RD)
1167 bool isTrivialForABI = RD->canPassInRegisters() &&
1168 isTrivialForMSVC(RD, FI.getReturnType(), CGM);
1193 const CXXRecordDecl *RD) {
1208 EmitVBPtrStores(CGF, RD);
1235 CodeGenFunction &CGF, const CXXRecordDecl *RD) {
1249 const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
1256 for (const CXXBaseSpecifier &S : RD->vbases()) {
1264 GetVirtualBaseClassOffset(CGF, getThisAddress(CGF), RD, VBase);
1267 // vtorDisp_for_vbase = vbptr[vbase_idx] - offsetof(RD, vbase).
1314 const CXXRecordDecl *RD) {
1318 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1320 const VBTableGlobals &VBGlobals = enumerateVBTables(RD);
1691 const CXXRecordDecl *RD,
1705 CGM.GetVCallVisibilityLevel(RD, Visited);
1720 CGM.AddVTableTypeMetadata(VTable, AddressPoint, RD);
1749 CGM.AddVTableTypeMetadata(VTable, AddressPoint, RD);
1753 const CXXRecordDecl *RD) {
1755 const VPtrInfoVector &VFPtrs = VFTContext.getVFPtrOffsets(RD);
1758 llvm::GlobalVariable *VTable = getAddrOfVTable(RD, Info->FullOffsetInMDC);
1763 VFTContext.getVFTableLayout(RD, Info->FullOffsetInMDC);
1768 RTTI = getMSCompleteObjectLocator(RD, *Info);
1776 emitVTableTypeMetadata(*Info, RD, VTable);
1797 const CXXRecordDecl *RD, const VPtrInfo &VFPtr,
1800 MangleContext.mangleCXXVFTable(RD, VFPtr.MangledPath, Out);
1811 llvm::GlobalVariable *MicrosoftCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
1817 VFTableIdTy ID(RD, VPtrOffset);
1827 const VPtrInfoVector &VFPtrs = VTContext.getVFPtrOffsets(RD);
1829 if (DeferredVFTables.insert(RD).second) {
1832 CGM.addDeferredVTable(RD);
1840 mangleVFTableName(getMangleContext(), RD, *VFPtrs[J], Name);
1858 mangleVFTableName(getMangleContext(), RD, *VFPtr, VFTableName);
1868 RD->hasAttr<DLLImportAttr>() ? llvm::GlobalValue::LinkOnceODRLinkage
1869 : CGM.getVTableLinkage(RD);
1887 VTContext.getVFTableLayout(RD, VFPtr->FullOffsetInMDC);
1939 if (RD->hasAttr<DLLExportAttr>())
2033 MicrosoftCXXABI::enumerateVBTables(const CXXRecordDecl *RD) {
2039 VBTablesMap.insert(std::make_pair(RD, VBTableGlobals()));
2045 VBGlobals.VBTables = &Context.enumerateVBTables(RD);
2049 llvm::GlobalVariable::LinkageTypes Linkage = CGM.getVTableLinkage(RD);
2053 VBGlobals.Globals.push_back(getAddrOfVBTable(**I, RD, Linkage));
2134 void MicrosoftCXXABI::emitVirtualInheritanceTables(const CXXRecordDecl *RD) {
2135 const VBTableGlobals &VBGlobals = enumerateVBTables(RD);
2140 emitVBTableDefinition(*VBT, RD, GV);
2145 MicrosoftCXXABI::getAddrOfVBTable(const VPtrInfo &VBT, const CXXRecordDecl *RD,
2149 getMangleContext().mangleCXXVBTable(RD, VBT.MangledPath, Out);
2163 if (RD->hasAttr<DLLImportAttr>())
2165 else if (RD->hasAttr<DLLExportAttr>())
2169 emitVBTableDefinition(VBT, RD, GV);
2175 const CXXRecordDecl *RD,
2179 assert(RD->getNumVBases() && ObjectWithVPtr->getNumVBases() &&
2184 const ASTRecordLayout &DerivedLayout = getContext().getASTRecordLayout(RD);
2218 if (RD->hasAttr<DLLImportAttr>())
2784 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
2785 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2787 RD->nullFieldOffsetIsZero());
2792 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
2793 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2817 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
2818 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2823 if (RD->nullFieldOffsetIsZero())
2852 const CXXRecordDecl *RD,
2855 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
2872 Offs = getContext().getASTRecordLayout(RD).getVBPtrOffset();
2889 llvm::Constant *MicrosoftCXXABI::EmitMemberDataPointer(const CXXRecordDecl *RD,
2891 if (RD->getMSInheritanceModel() ==
2893 offset -= getContext().getOffsetOfBaseWithVBPtr(RD);
2896 return EmitFullMemberPointer(FirstField, /*IsMemberFunction=*/false, RD,
2922 const CXXRecordDecl *RD = cast<CXXRecordDecl>(FD->getParent());
2923 RD = RD->getMostRecentNonInjectedDecl();
2924 C = EmitMemberDataPointer(RD, FieldOffset);
2968 const CXXRecordDecl *RD = MD->getParent()->getMostRecentNonInjectedDecl();
2993 VBTableIndex = VTableContext.getVBTableIndex(RD, ML.VBase) * 4;
2997 RD->getMSInheritanceModel() ==
2999 NonVirtualBaseAdjustment -= getContext().getOffsetOfBaseWithVBPtr(RD);
3002 return EmitFullMemberPointer(FirstField, /*IsMemberFunction=*/true, RD,
3032 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
3033 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
3170 CodeGenFunction &CGF, const Expr *E, const CXXRecordDecl *RD,
3193 // If we weren't given a dynamic vbptr offset, RD should be complete and we'll
3197 if (!RD->hasDefinition()) {
3203 Diags.Report(E->getExprLoc(), DiagID) << RD << E->getSourceRange();
3204 } else if (RD->getNumVBases())
3205 offs = getContext().getASTRecordLayout(RD).getVBPtrOffset();
3231 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
3232 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
3251 Addr = AdjustVirtualBase(CGF, E, RD, Base, VirtualBaseAdjustmentOffset,
3515 const CXXRecordDecl *RD = MPT->getMostRecentCXXRecordDecl();
3518 MSInheritanceModel Inheritance = RD->getMSInheritanceModel();
3539 ThisPtrForCall = AdjustVirtualBase(CGF, E, RD, This,
3613 MSRTTIClass(const CXXRecordDecl *RD) : RD(RD) {}
3622 const CXXRecordDecl *RD, *VirtualRoot;
3638 VirtualRoot = RD;
3644 OffsetInVBase = Parent->OffsetInVBase + RD->getASTContext()
3645 .getASTRecordLayout(Parent->RD).getBaseClassOffset(RD).getQuantity();
3650 for (const CXXBaseSpecifier &Base : RD->bases()) {
3685 MSRTTIBuilder(MicrosoftCXXABI &ABI, const CXXRecordDecl *RD)
3687 VMContext(CGM.getLLVMContext()), Module(CGM.getModule()), RD(RD),
3688 Linkage(getLinkageForRTTI(CGM.getContext().getTagDeclType(RD))),
3701 const CXXRecordDecl *RD;
3711 const CXXRecordDecl *RD) {
3712 Classes.push_back(MSRTTIClass(RD));
3713 for (const CXXBaseSpecifier &Base : RD->bases())
3725 !VirtualBases.insert(Class->RD).second) {
3729 if (!UniqueBases.insert(Class->RD).second)
3730 AmbiguousBases.insert(Class->RD);
3736 if (AmbiguousBases.count(Class.RD))
3744 ABI.getMangleContext().mangleCXXRTTIClassHierarchyDescriptor(RD, Out);
3753 serializeClassHierarchy(Classes, RD);
3758 if (Class.RD->getNumBases() > 1)
3765 if ((Flags & HasBranchingHierarchy) && RD->getNumVBases() != 0)
3800 ABI.getMangleContext().mangleCXXRTTIBaseClassArray(RD, Out);
3835 OffsetInVBTable = VTableContext.getVBTableIndex(RD, Class.VirtualRoot) * 4;
3836 VBPtrOffset = Context.getASTRecordLayout(RD).getVBPtrOffset().getQuantity();
3843 Class.RD, Class.OffsetInVBase, VBPtrOffset, OffsetInVBTable,
3862 ABI.getAddrOfRTTIDescriptor(Context.getTypeDeclType(Class.RD))),
3869 MSRTTIBuilder(ABI, Class.RD).getClassHierarchyDescriptor()),
3880 ABI.getMangleContext().mangleCXXRTTICompleteObjectLocator(RD, Info.MangledPath, Out);
3892 if (Context.getASTRecordLayout(RD)
3909 CGM.GetAddrOfRTTIDescriptor(Context.getTypeDeclType(RD))),
4026 MicrosoftCXXABI::getMSCompleteObjectLocator(const CXXRecordDecl *RD,
4028 return MSRTTIBuilder(*this, RD).getCompleteObjectLocator(Info);
4078 const CXXRecordDecl *RD = CD->getParent();
4079 QualType RecordTy = getContext().getRecordType(RD);
4117 if (RD->getNumVBases() > 0)
4184 CXXRecordDecl *RD = T->getAsCXXRecordDecl();
4186 RD ? CGM.getContext().getCopyConstructorForExceptionObject(RD) : nullptr;
4219 bool IsScalar = !RD;
4225 if (const CXXRecordDecl *RD = PointeeType->getAsCXXRecordDecl()) {
4226 HasVirtualBases = RD->getNumVBases() > 0;
4227 if (IdentifierInfo *II = RD->getIdentifier())
4228 IsStdBadAlloc = II->isStr("bad_alloc") && RD->isInStdNamespace();
4315 QualType RTTITy = QualType(Class.RD->getTypeForDecl(), 0);
4419 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl())
4420 if (CXXDestructorDecl *DtorD = RD->getDestructor())
4465 const CXXRecordDecl *RD) {
4466 std::tie(This, std::ignore, RD) =
4467 performBaseAdjustment(CGF, This, QualType(RD->getTypeForDecl(), 0));
4468 return {CGF.GetVTablePtr(This, CGM.Int8PtrTy, RD), RD};
4472 const CXXRecordDecl *RD) const {
4481 if (RD->isEmpty())
4483 if (RD->isPolymorphic())
4485 if (RD->hasNonTrivialCopyAssignment())
4487 if (RD->hasNonTrivialDestructor())
4489 if (RD->hasNonTrivialDefaultConstructor())
4502 for (const CXXBaseSpecifier &B : RD->bases()) {