Lines Matching defs:RD
330 const CXXRecordDecl *RD = Base.getBase();
334 SubobjectNumber = ++SubobjectCounts[RD];
337 assert(!SubobjectOffsets.count(std::make_pair(RD, SubobjectNumber))
339 assert(!SubobjectLayoutClassOffsets.count(std::make_pair(RD, SubobjectNumber))
342 SubobjectOffsets[std::make_pair(RD, SubobjectNumber)] = Base.getBaseOffset();
343 SubobjectLayoutClassOffsets[std::make_pair(RD, SubobjectNumber)] =
347 for (const auto &B : RD->bases()) {
364 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
380 const CXXRecordDecl *RD = Base.getBase();
381 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
383 for (const auto &B : RD->bases()) {
406 RD->printQualifiedName(Out);
411 for (const auto *MD : RD->methods()) {
687 const CXXRecordDecl *RD = Base.getBase();
688 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
705 for (const auto *MD : RD->methods()) {
734 for (const auto &B : RD->bases()) {
752 VCallAndVBaseOffsetBuilder::AddVBaseOffsets(const CXXRecordDecl *RD,
758 for (const auto &B : RD->bases()) {
983 void DeterminePrimaryVirtualBases(const CXXRecordDecl *RD,
989 void LayoutVTablesForVirtualBases(const CXXRecordDecl *RD,
1404 const CXXRecordDecl *RD = FirstBaseInPrimaryBaseChain;
1405 PrimaryBases.insert(RD);
1410 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1438 RD = PrimaryBase;
1483 const CXXRecordDecl *RD = Base.getBase();
1484 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1526 for (const auto *MD : RD->methods()) {
1729 const CXXRecordDecl *RD = Base.getBase();
1730 if (RD == MostDerivedClass) {
1752 std::make_pair(BaseSubobject(RD, OffsetInLayoutClass),
1757 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1776 RD = PrimaryBase;
1792 const CXXRecordDecl *RD = Base.getBase();
1793 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1796 for (const auto &B : RD->bases()) {
1842 const CXXRecordDecl *RD, CharUnits OffsetInLayoutClass,
1844 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
1874 for (const auto &B : RD->bases()) {
1898 const CXXRecordDecl *RD, VisitedVirtualBasesSetTy &VBases) {
1903 for (const auto &B : RD->bases()) {
2135 const CXXRecordDecl *RD = I.second.getBase();
2136 ClassNames.insert(RD->getQualifiedNameAsString());
2344 const CXXRecordDecl *RD = cast<CXXMethodDecl>(GD.getDecl())->getParent();
2346 computeVTableRelatedInformation(RD);
2354 ItaniumVTableContext::getVirtualBaseOffsetOffset(const CXXRecordDecl *RD,
2356 ClassPairTy ClassPair(RD, VBase);
2363 VCallAndVBaseOffsetBuilder Builder(*this, RD, RD, /*Overriders=*/nullptr,
2364 BaseSubobject(RD, CharUnits::Zero()),
2370 ClassPairTy ClassPair(RD, I.first);
2421 ItaniumVTableContext::computeVTableRelatedInformation(const CXXRecordDecl *RD) {
2422 std::unique_ptr<const VTableLayout> &Entry = VTableLayouts[RD];
2428 ItaniumVTableBuilder Builder(*this, RD, CharUnits::Zero(),
2429 /*MostDerivedClassIsVirtual=*/false, RD);
2441 if (!RD->getNumVBases())
2445 RD->vbases_begin()->getType()->getAsCXXRecordDecl();
2447 if (VirtualBaseClassOffsetOffsets.count(std::make_pair(RD, VBase)))
2452 ClassPairTy ClassPair(RD, I.first);
2999 const CXXRecordDecl *RD,
3011 for (const auto *D : RD->decls()) {
3030 static bool isDirectVBase(const CXXRecordDecl *Base, const CXXRecordDecl *RD) {
3031 for (const auto &B : RD->bases()) {
3041 const CXXRecordDecl *RD = Base.getBase();
3042 if (!RD->isPolymorphic())
3045 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
3054 if (isDirectVBase(NextBase, RD)) {
3077 GroupNewVirtualOverloads(RD, VirtualMethods);
3392 const CXXRecordDecl *RD,
3395 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
3399 Paths.push_back(std::make_unique<VPtrInfo>(RD));
3404 for (const auto &B : RD->bases()) {
3435 P->ObjectWithVPtr = RD;
3517 // (RD, Offset) to the subobject located at IntroducingObject.
3520 const CXXRecordDecl *RD, CharUnits Offset,
3524 if (BaseSubobject(RD, Offset) == IntroducingObject) {
3529 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
3531 for (const CXXBaseSpecifier &BS : RD->bases()) {
3560 const CXXRecordDecl *RD,
3563 Context.getASTRecordLayout(RD);
3568 if (Base == RD) {
3574 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
3578 RD->bases_begin(), RD->bases_end(), [&](const CXXBaseSpecifier &BS) {
3583 RD = Base;
3592 const CXXRecordDecl *RD,
3648 Diags.Report(RD->getLocation(), diag::err_vftable_ambiguous_component)
3649 << RD;
3662 const CXXRecordDecl *RD,
3664 const ASTRecordLayout &MostDerivedLayout = Context.getASTRecordLayout(RD);
3669 Context, MostDerivedLayout, RD, CharUnits::Zero(),
3676 selectBestPath(Context, RD, *Info, FullPaths))
3696 const CXXRecordDecl *RD) {
3697 assert(RD->isDynamicClass());
3700 if (VFPtrLocations.count(RD))
3707 computeVTablePaths(/*ForVBTables=*/false, RD, *VFPtrs);
3708 computeFullPathsForVFTables(Context, RD, *VFPtrs);
3709 VFPtrLocations[RD] = std::move(VFPtrs);
3713 for (const std::unique_ptr<VPtrInfo> &VFPtr : *VFPtrLocations[RD]) {
3714 VFTableBuilder Builder(*this, RD, *VFPtr);
3716 VFTableIdTy id(RD, VFPtr->FullOffsetInMDC);
3725 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
3740 dumpMethodLocations(RD, NewMethodLocations, llvm::outs());
3744 const CXXRecordDecl *RD, const MethodVFTableLocationsTy &NewMethods,
3772 RD->printQualifiedName(Out);
3803 const CXXRecordDecl *RD) {
3807 // Get or create a VBI for RD. Don't hold a reference to the DenseMap cell,
3809 std::unique_ptr<VirtualBaseInfo> &Entry = VBaseInfo[RD];
3816 computeVTablePaths(/*ForVBTables=*/true, RD, VBI->VBPtrPaths);
3819 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
3832 for (const auto &VB : RD->vbases()) {
3849 MicrosoftVTableContext::enumerateVBTables(const CXXRecordDecl *RD) {
3850 return computeVBTableRelatedInformation(RD).VBPtrPaths;
3854 MicrosoftVTableContext::getVFPtrOffsets(const CXXRecordDecl *RD) {
3855 computeVTableRelatedInformation(RD);
3857 assert(VFPtrLocations.count(RD) && "Couldn't find vfptr locations");
3858 return *VFPtrLocations[RD];
3862 MicrosoftVTableContext::getVFTableLayout(const CXXRecordDecl *RD,
3864 computeVTableRelatedInformation(RD);
3866 VFTableIdTy id(RD, VFPtrOffset);
3884 const CXXRecordDecl *RD = cast<CXXMethodDecl>(GD.getDecl())->getParent();
3886 computeVTableRelatedInformation(RD);