Lines Matching refs:MD

141   OverriderInfo getOverrider(const CXXMethodDecl *MD,  in getOverrider()  argument
143 assert(OverridersMap.count(std::make_pair(MD, BaseOffset)) && in getOverrider()
146 return OverridersMap.lookup(std::make_pair(MD, BaseOffset)); in getOverrider()
181 const CXXMethodDecl *MD = Overrider.first; in FinalOverriders() local
186 assert(SubobjectOffsets.count(std::make_pair(MD->getParent(), in FinalOverriders()
190 CharUnits BaseOffset = SubobjectOffsets[std::make_pair(MD->getParent(), in FinalOverriders()
204 OverriderInfo& Overrider = OverridersMap[std::make_pair(MD, BaseOffset)]; in FinalOverriders()
411 for (const auto *MD : RD->methods()) { in dump() local
412 if (!VTableContextBase::hasVtableSlot(MD)) in dump()
414 MD = MD->getCanonicalDecl(); in dump()
416 OverriderInfo Overrider = getOverrider(MD, Base.getBaseOffset()); in dump()
419 MD->printQualifiedName(Out); in dump()
426 Offset = ComputeReturnAdjustmentBaseOffset(Context, Overrider.Method, MD); in dump()
460 bool AddVCallOffset(const CXXMethodDecl *MD, CharUnits OffsetOffset);
464 CharUnits getVCallOffsetOffset(const CXXMethodDecl *MD);
509 bool VCallOffsetMap::AddVCallOffset(const CXXMethodDecl *MD, in AddVCallOffset() argument
513 if (MethodsCanShareVCallOffset(OffsetPair.first, MD)) in AddVCallOffset()
518 Offsets.push_back(MethodAndOffsetPairTy(MD, OffsetOffset)); in AddVCallOffset()
522 CharUnits VCallOffsetMap::getVCallOffsetOffset(const CXXMethodDecl *MD) { in getVCallOffsetOffset() argument
525 if (MethodsCanShareVCallOffset(OffsetPair.first, MD)) in getVCallOffsetOffset()
705 for (const auto *MD : RD->methods()) { in AddVCallOffsets() local
706 if (!VTableContextBase::hasVtableSlot(MD)) in AddVCallOffsets()
708 MD = MD->getCanonicalDecl(); in AddVCallOffsets()
714 if (!VCallOffsets.AddVCallOffset(MD, OffsetOffset)) in AddVCallOffsets()
722 Overriders->getOverrider(MD, Base.getBaseOffset()); in AddVCallOffsets()
891 void AddThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk);
916 ComputeThisAdjustment(const CXXMethodDecl *MD,
922 void AddMethod(const CXXMethodDecl *MD, ReturnAdjustment ReturnAdjustment);
1071 void ItaniumVTableBuilder::AddThunk(const CXXMethodDecl *MD, in AddThunk() argument
1076 SmallVectorImpl<ThunkInfo> &ThunksVector = Thunks[MD]; in AddThunk()
1093 visitAllOverriddenMethods(const CXXMethodDecl *MD, VisitorTy &Visitor) { in visitAllOverriddenMethods() argument
1094 assert(VTableContextBase::hasVtableSlot(MD) && "Method is not virtual!"); in visitAllOverriddenMethods()
1096 for (const CXXMethodDecl *OverriddenMD : MD->overridden_methods()) { in visitAllOverriddenMethods()
1106 ComputeAllOverriddenMethods(const CXXMethodDecl *MD, in ComputeAllOverriddenMethods() argument
1108 auto OverriddenMethodsCollector = [&](const CXXMethodDecl *MD) { in ComputeAllOverriddenMethods() argument
1110 return OverriddenMethods.insert(MD).second; in ComputeAllOverriddenMethods()
1112 visitAllOverriddenMethods(MD, OverriddenMethodsCollector); in ComputeAllOverriddenMethods()
1119 const CXXMethodDecl *MD = MI.first; in ComputeThisAdjustments() local
1130 Overriders.getOverrider(MD, MethodInfo.BaseOffset); in ComputeThisAdjustments()
1144 ComputeThisAdjustment(MD, MethodInfo.BaseOffsetInLayoutClass, Overrider); in ComputeThisAdjustments()
1173 const CXXMethodDecl *Method = VTables.findOriginalMethodInMap(MD); in ComputeThisAdjustments()
1182 if (isa<CXXDestructorDecl>(MD)) { in ComputeThisAdjustments()
1199 const CXXMethodDecl *MD; in ComputeThisAdjustments() local
1205 MD = Component.getFunctionDecl(); in ComputeThisAdjustments()
1208 MD = Component.getDestructorDecl(); in ComputeThisAdjustments()
1215 if (MD->getParent() == MostDerivedClass) in ComputeThisAdjustments()
1216 AddThunk(MD, Thunk); in ComputeThisAdjustments()
1291 const CXXMethodDecl *MD, CharUnits BaseOffsetInLayoutClass, in ComputeThisAdjustment() argument
1297 BaseSubobject OverriddenBaseSubobject(MD->getParent(), in ComputeThisAdjustment()
1330 VCallOffsets.getVCallOffsetOffset(MD).getQuantity(); in ComputeThisAdjustment()
1339 void ItaniumVTableBuilder::AddMethod(const CXXMethodDecl *MD, in AddMethod() argument
1341 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { in AddMethod()
1354 Components.push_back(VTableComponent::MakeFunction(MD)); in AddMethod()
1370 const CXXMethodDecl *MD, in OverridesIndirectMethodInBases() argument
1372 if (Bases.count(MD->getParent())) in OverridesIndirectMethodInBases()
1375 for (const CXXMethodDecl *OverriddenMD : MD->overridden_methods()) { in OverridesIndirectMethodInBases()
1452 FindNearestOverriddenMethod(const CXXMethodDecl *MD, in FindNearestOverriddenMethod() argument
1455 ComputeAllOverriddenMethods(MD, OverriddenMethods); in FindNearestOverriddenMethod()
1526 for (const auto *MD : RD->methods()) { in AddMethods() local
1527 if (!ItaniumVTableContext::hasVtableSlot(MD)) in AddMethods()
1529 MD = MD->getCanonicalDecl(); in AddMethods()
1533 Overriders.getOverrider(MD, Base.getBaseOffset()); in AddMethods()
1539 FindNearestOverriddenMethod(MD, PrimaryBases)) { in AddMethods()
1540 if (ComputeReturnAdjustmentBaseOffset(Context, MD, in AddMethods()
1542 VTables.setOriginalMethod(MD, OverriddenMD); in AddMethods()
1553 assert(!MethodInfoMap.count(MD) && in AddMethods()
1556 MethodInfoMap.insert(std::make_pair(MD, MethodInfo)); in AddMethods()
1563 if (!isBuildingConstructorVTable() && OverriddenMD != MD) { in AddMethods()
1576 ComputeReturnAdjustmentBaseOffset(Context, Overrider.Method, MD); in AddMethods()
1591 if (MD->isImplicit()) in AddMethods()
1592 NewImplicitVirtualFunctions.push_back(MD); in AddMethods()
1594 NewVirtualFunctions.push_back(MD); in AddMethods()
1618 for (const CXXMethodDecl *MD : NewVirtualFunctions) { in AddMethods() local
1621 Overriders.getOverrider(MD, Base.getBaseOffset()); in AddMethods()
1627 assert(!MethodInfoMap.count(MD) && in AddMethods()
1629 MethodInfoMap.insert(std::make_pair(MD, MethodInfo)); in AddMethods()
1645 ComputeReturnAdjustmentBaseOffset(Context, OverriderMD, MD); in AddMethods()
1656 VTableThunks[Components.size()].Method = MD; in AddMethods()
1657 VTableThunks[Components.size()].ThisType = MD->getThisType().getTypePtr(); in AddMethods()
1733 const CXXMethodDecl *MD = I.first; in LayoutPrimaryAndSecondaryVTables() local
1735 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { in LayoutPrimaryAndSecondaryVTables()
1741 MethodVTableIndices[MD] = MI.VTableIndex - AddressPoint; in LayoutPrimaryAndSecondaryVTables()
2019 const CXXMethodDecl *MD = Component.getFunctionDecl(); in dumpLayout() local
2022 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpLayout()
2024 if (MD->isPureVirtual()) in dumpLayout()
2027 if (MD->isDeleted()) in dumpLayout()
2101 const CXXMethodDecl *MD = Component.getUnusedFunctionDecl(); in dumpLayout() local
2104 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpLayout()
2106 if (MD->isPureVirtual()) in dumpLayout()
2180 const CXXMethodDecl *MD = I.first; in dumpLayout() local
2182 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpLayout()
2184 MethodNamesAndDecls.insert(std::make_pair(MethodName, MD)); in dumpLayout()
2189 const CXXMethodDecl *MD = I.second; in dumpLayout() local
2191 ThunkInfoVectorTy ThunksVector = Thunks[MD]; in dumpLayout()
2239 for (const auto *MD : MostDerivedClass->methods()) { in dumpLayout() local
2241 if (!ItaniumVTableContext::hasVtableSlot(MD)) in dumpLayout()
2243 MD = MD->getCanonicalDecl(); in dumpLayout()
2246 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpLayout()
2248 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { in dumpLayout()
2255 assert(MethodVTableIndices.count(MD)); in dumpLayout()
2256 IndicesMap[MethodVTableIndices[MD]] = MethodName; in dumpLayout()
2328 bool VTableContextBase::hasVtableSlot(const CXXMethodDecl *MD) { in hasVtableSlot() argument
2329 return MD->isVirtual() && !MD->isImmediateFunction(); in hasVtableSlot()
2382 const auto *MD = cast<CXXMethodDecl>(GD.getDecl()); in findOriginalMethod() local
2383 computeVTableRelatedInformation(MD->getParent()); in findOriginalMethod()
2384 const CXXMethodDecl *OriginalMD = findOriginalMethodInMap(MD); in findOriginalMethod()
2392 ItaniumVTableContext::findOriginalMethodInMap(const CXXMethodDecl *MD) const { in findOriginalMethodInMap()
2396 auto I = OriginalMethodMap.find(MD); in findOriginalMethodInMap()
2404 MD = I->second; in findOriginalMethodInMap()
2407 return MD; in findOriginalMethodInMap()
2594 void AddThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk) { in AddThunk() argument
2595 SmallVector<ThunkInfo, 1> &ThunksVector = Thunks[MD]; in AddThunk()
2613 void AddMethod(const CXXMethodDecl *MD, ThunkInfo TI) { in AddMethod() argument
2616 AddThunk(MD, TI); in AddMethod()
2618 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { in AddMethod()
2623 Components.push_back(VTableComponent::MakeFunction(MD)); in AddMethod()
2647 const CXXMethodDecl *MD = I.first; in LayoutVFTable() local
2649 assert(MD == MD->getCanonicalDecl()); in LayoutVFTable()
2653 if (MD->getParent() != MostDerivedClass || MI.Shadowed) in LayoutVFTable()
2657 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) { in LayoutVFTable()
2660 MethodVFTableLocations[MD] = Loc; in LayoutVFTable()
3021 if (const auto *MD = dyn_cast<CXXMethodDecl>(ND)) in GroupNewVirtualOverloads() local
3022 if (MicrosoftVTableContext::hasVtableSlot(MD)) in GroupNewVirtualOverloads()
3023 Groups[J->second].push_back(MD->getCanonicalDecl()); in GroupNewVirtualOverloads()
3087 for (const CXXMethodDecl *MD : VirtualMethods) { in AddMethods() local
3089 Overriders.getOverrider(MD, Base.getBaseOffset()); in AddMethods()
3092 FindNearestOverriddenMethod(MD, VisitedBases); in AddMethods()
3099 if ((OverriddenMD || FinalOverriderMD != MD) && in AddMethods()
3127 Context, MD, OverriddenMD).isEmpty() || in AddMethods()
3136 assert(!MethodInfoMap.count(MD) && in AddMethods()
3138 MethodInfoMap.insert(std::make_pair(MD, MI)); in AddMethods()
3149 !(MD == FinalOverriderMD && ThisAdjustmentOffset.isEmpty()); in AddMethods()
3151 MD->size_overridden_methods()) { in AddMethods()
3164 assert(!MethodInfoMap.count(MD) && in AddMethods()
3166 MethodInfoMap.insert(std::make_pair(MD, MI)); in AddMethods()
3174 ComputeReturnAdjustmentBaseOffset(Context, FinalOverriderMD, MD); in AddMethods()
3190 auto ThisType = (OverriddenMD ? OverriddenMD : MD)->getThisType().getTypePtr(); in AddMethods()
3193 ForceReturnAdjustmentMangling ? MD : nullptr)); in AddMethods()
3264 const CXXMethodDecl *MD = Component.getFunctionDecl(); in dumpLayout() local
3269 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpLayout()
3271 if (MD->isPureVirtual()) in dumpLayout()
3274 if (MD->isDeleted()) in dumpLayout()
3322 const CXXMethodDecl *MD = I.first; in dumpLayout() local
3324 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpLayout()
3326 MethodNamesAndDecls.insert(std::make_pair(MethodName, MD)); in dumpLayout()
3331 const CXXMethodDecl *MD = MethodNameAndDecl.second; in dumpLayout() local
3333 ThunkInfoVectorTy ThunksVector = Thunks[MD]; in dumpLayout()
3613 for (const CXXMethodDecl *MD : Info.IntroducingObject->methods()) { in selectBestPath() local
3614 if (!MicrosoftVTableContext::hasVtableSlot(MD)) in selectBestPath()
3617 Overriders.getOverrider(MD->getCanonicalDecl(), BaseOffset); in selectBestPath()
3621 if (ComputeReturnAdjustmentBaseOffset(Context, OverridingMethod, MD) in selectBestPath()
3752 const CXXMethodDecl *MD = cast<const CXXMethodDecl>(I.first.getDecl()); in dumpMethodLocations() local
3753 assert(hasVtableSlot(MD)); in dumpMethodLocations()
3756 PredefinedIdentKind::PrettyFunctionNoVirtual, MD); in dumpMethodLocations()
3758 if (isa<CXXDestructorDecl>(MD)) { in dumpMethodLocations()