Lines Matching defs:MD

141   OverriderInfo getOverrider(const CXXMethodDecl *MD,
143 assert(OverridersMap.count(std::make_pair(MD, BaseOffset)) &&
146 return OverridersMap.lookup(std::make_pair(MD, BaseOffset));
181 const CXXMethodDecl *MD = Overrider.first;
186 assert(SubobjectOffsets.count(std::make_pair(MD->getParent(),
190 CharUnits BaseOffset = SubobjectOffsets[std::make_pair(MD->getParent(),
204 OverriderInfo& Overrider = OverridersMap[std::make_pair(MD, BaseOffset)];
411 for (const auto *MD : RD->methods()) {
412 if (!VTableContextBase::hasVtableSlot(MD))
414 MD = MD->getCanonicalDecl();
416 OverriderInfo Overrider = getOverrider(MD, Base.getBaseOffset());
419 MD->printQualifiedName(Out);
426 Offset = ComputeReturnAdjustmentBaseOffset(Context, Overrider.Method, MD);
460 bool AddVCallOffset(const CXXMethodDecl *MD, CharUnits OffsetOffset);
464 CharUnits getVCallOffsetOffset(const CXXMethodDecl *MD);
509 bool VCallOffsetMap::AddVCallOffset(const CXXMethodDecl *MD,
513 if (MethodsCanShareVCallOffset(OffsetPair.first, MD))
518 Offsets.push_back(MethodAndOffsetPairTy(MD, OffsetOffset));
522 CharUnits VCallOffsetMap::getVCallOffsetOffset(const CXXMethodDecl *MD) {
525 if (MethodsCanShareVCallOffset(OffsetPair.first, MD))
705 for (const auto *MD : RD->methods()) {
706 if (!VTableContextBase::hasVtableSlot(MD))
708 MD = MD->getCanonicalDecl();
714 if (!VCallOffsets.AddVCallOffset(MD, OffsetOffset))
722 Overriders->getOverrider(MD, Base.getBaseOffset());
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,
1076 SmallVectorImpl<ThunkInfo> &ThunksVector = Thunks[MD];
1093 visitAllOverriddenMethods(const CXXMethodDecl *MD, VisitorTy &Visitor) {
1094 assert(VTableContextBase::hasVtableSlot(MD) && "Method is not virtual!");
1096 for (const CXXMethodDecl *OverriddenMD : MD->overridden_methods()) {
1106 ComputeAllOverriddenMethods(const CXXMethodDecl *MD,
1108 auto OverriddenMethodsCollector = [&](const CXXMethodDecl *MD) {
1110 return OverriddenMethods.insert(MD).second;
1112 visitAllOverriddenMethods(MD, OverriddenMethodsCollector);
1119 const CXXMethodDecl *MD = MI.first;
1130 Overriders.getOverrider(MD, MethodInfo.BaseOffset);
1144 ComputeThisAdjustment(MD, MethodInfo.BaseOffsetInLayoutClass, Overrider);
1152 // created the vtable entry. MD is not necessarily the method that
1157 // For example, in the following class hierarchy, if MD = D1::m and
1159 // which is what findOriginalMethodInMap(MD) returns:
1173 const CXXMethodDecl *Method = VTables.findOriginalMethodInMap(MD);
1182 if (isa<CXXDestructorDecl>(MD)) {
1199 const CXXMethodDecl *MD;
1205 MD = Component.getFunctionDecl();
1208 MD = Component.getDestructorDecl();
1215 if (MD->getParent() == MostDerivedClass)
1216 AddThunk(MD, Thunk);
1291 const CXXMethodDecl *MD, CharUnits BaseOffsetInLayoutClass,
1297 BaseSubobject OverriddenBaseSubobject(MD->getParent(),
1330 VCallOffsets.getVCallOffsetOffset(MD).getQuantity();
1339 void ItaniumVTableBuilder::AddMethod(const CXXMethodDecl *MD,
1341 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) {
1354 Components.push_back(VTableComponent::MakeFunction(MD));
1370 const CXXMethodDecl *MD,
1372 if (Bases.count(MD->getParent()))
1375 for (const CXXMethodDecl *OverriddenMD : MD->overridden_methods()) {
1452 FindNearestOverriddenMethod(const CXXMethodDecl *MD,
1455 ComputeAllOverriddenMethods(MD, OverriddenMethods);
1526 for (const auto *MD : RD->methods()) {
1527 if (!ItaniumVTableContext::hasVtableSlot(MD))
1529 MD = MD->getCanonicalDecl();
1533 Overriders.getOverrider(MD, Base.getBaseOffset());
1539 FindNearestOverriddenMethod(MD, PrimaryBases)) {
1540 if (ComputeReturnAdjustmentBaseOffset(Context, MD,
1542 VTables.setOriginalMethod(MD, OverriddenMD);
1553 assert(!MethodInfoMap.count(MD) &&
1556 MethodInfoMap.insert(std::make_pair(MD, MethodInfo));
1563 if (!isBuildingConstructorVTable() && OverriddenMD != MD) {
1572 // There's no return adjustment from OverriddenMD and MD,
1573 // but that doesn't mean there isn't one between MD and
1576 ComputeReturnAdjustmentBaseOffset(Context, Overrider.Method, MD);
1591 if (MD->isImplicit())
1592 NewImplicitVirtualFunctions.push_back(MD);
1594 NewVirtualFunctions.push_back(MD);
1618 for (const CXXMethodDecl *MD : NewVirtualFunctions) {
1621 Overriders.getOverrider(MD, Base.getBaseOffset());
1627 assert(!MethodInfoMap.count(MD) &&
1629 MethodInfoMap.insert(std::make_pair(MD, MethodInfo));
1645 ComputeReturnAdjustmentBaseOffset(Context, OverriderMD, MD);
1656 VTableThunks[Components.size()].Method = MD;
1657 VTableThunks[Components.size()].ThisType = MD->getThisType().getTypePtr();
1733 const CXXMethodDecl *MD = I.first;
1735 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) {
1741 MethodVTableIndices[MD] = MI.VTableIndex - AddressPoint;
2019 const CXXMethodDecl *MD = Component.getFunctionDecl();
2022 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
2024 if (MD->isPureVirtual())
2027 if (MD->isDeleted())
2101 const CXXMethodDecl *MD = Component.getUnusedFunctionDecl();
2104 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
2106 if (MD->isPureVirtual())
2180 const CXXMethodDecl *MD = I.first;
2182 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
2184 MethodNamesAndDecls.insert(std::make_pair(MethodName, MD));
2189 const CXXMethodDecl *MD = I.second;
2191 ThunkInfoVectorTy ThunksVector = Thunks[MD];
2239 for (const auto *MD : MostDerivedClass->methods()) {
2241 if (!ItaniumVTableContext::hasVtableSlot(MD))
2243 MD = MD->getCanonicalDecl();
2246 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
2248 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) {
2255 assert(MethodVTableIndices.count(MD));
2256 IndicesMap[MethodVTableIndices[MD]] = MethodName;
2328 bool VTableContextBase::hasVtableSlot(const CXXMethodDecl *MD) {
2329 return MD->isVirtual() && !MD->isImmediateFunction();
2382 const auto *MD = cast<CXXMethodDecl>(GD.getDecl());
2383 computeVTableRelatedInformation(MD->getParent());
2384 const CXXMethodDecl *OriginalMD = findOriginalMethodInMap(MD);
2392 ItaniumVTableContext::findOriginalMethodInMap(const CXXMethodDecl *MD) const {
2396 auto I = OriginalMethodMap.find(MD);
2398 // MD doesn't exist in OriginalMethodMap, so it must be the method we are
2403 // Set MD to the overridden method.
2404 MD = I->second;
2407 return MD;
2594 void AddThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk) {
2595 SmallVector<ThunkInfo, 1> &ThunksVector = Thunks[MD];
2613 void AddMethod(const CXXMethodDecl *MD, ThunkInfo TI) {
2616 AddThunk(MD, TI);
2618 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) {
2623 Components.push_back(VTableComponent::MakeFunction(MD));
2647 const CXXMethodDecl *MD = I.first;
2649 assert(MD == MD->getCanonicalDecl());
2653 if (MD->getParent() != MostDerivedClass || MI.Shadowed)
2657 if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(MD)) {
2660 MethodVFTableLocations[MD] = Loc;
2798 // This will hold the smallest this offset among overridees of MD.
3021 if (const auto *MD = dyn_cast<CXXMethodDecl>(ND))
3022 if (MicrosoftVTableContext::hasVtableSlot(MD))
3023 Groups[J->second].push_back(MD->getCanonicalDecl());
3087 for (const CXXMethodDecl *MD : VirtualMethods) {
3089 Overriders.getOverrider(MD, Base.getBaseOffset());
3092 FindNearestOverriddenMethod(MD, VisitedBases);
3099 if ((OverriddenMD || FinalOverriderMD != MD) &&
3108 // If MD overrides anything in this vftable, we need to update the
3122 // We must create a new slot if the MD's return type is not trivially
3127 Context, MD, OverriddenMD).isEmpty() ||
3136 assert(!MethodInfoMap.count(MD) &&
3138 MethodInfoMap.insert(std::make_pair(MD, MI));
3149 !(MD == FinalOverriderMD && ThisAdjustmentOffset.isEmpty());
3151 MD->size_overridden_methods()) {
3158 // If we got here, MD is a method not seen in any of the sub-bases or
3164 assert(!MethodInfoMap.count(MD) &&
3166 MethodInfoMap.insert(std::make_pair(MD, MI));
3174 ComputeReturnAdjustmentBaseOffset(Context, FinalOverriderMD, MD);
3190 auto ThisType = (OverriddenMD ? OverriddenMD : MD)->getThisType().getTypePtr();
3193 ForceReturnAdjustmentMangling ? MD : nullptr));
3264 const CXXMethodDecl *MD = Component.getFunctionDecl();
3269 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
3271 if (MD->isPureVirtual())
3274 if (MD->isDeleted())
3322 const CXXMethodDecl *MD = I.first;
3324 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
3326 MethodNamesAndDecls.insert(std::make_pair(MethodName, MD));
3331 const CXXMethodDecl *MD = MethodNameAndDecl.second;
3333 ThunkInfoVectorTy ThunksVector = Thunks[MD];
3613 for (const CXXMethodDecl *MD : Info.IntroducingObject->methods()) {
3614 if (!MicrosoftVTableContext::hasVtableSlot(MD))
3617 Overriders.getOverrider(MD->getCanonicalDecl(), BaseOffset);
3621 if (ComputeReturnAdjustmentBaseOffset(Context, OverridingMethod, MD)
3752 const CXXMethodDecl *MD = cast<const CXXMethodDecl>(I.first.getDecl());
3753 assert(hasVtableSlot(MD));
3756 PredefinedIdentKind::PrettyFunctionNoVirtual, MD);
3758 if (isa<CXXDestructorDecl>(MD)) {