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