================ @@ -2056,40 +2056,41 @@ void CXXRecordDecl::completeDefinition() { completeDefinition(nullptr); } +static bool hasPureVirtualFinalOverrider( + const CXXRecordDecl &RD, const CXXFinalOverriderMap *FinalOverriders) { + auto ExistsIn = [](const CXXFinalOverriderMap &FinalOverriders) { + for (const CXXFinalOverriderMap::value_type & + OverridingMethodsEntry : FinalOverriders) { + for (const auto &[_, SubobjOverrides] : OverridingMethodsEntry.second) { + assert(SubobjOverrides.size() > 0 && + "All virtual functions have overriding virtual functions"); + + if (SubobjOverrides.front().Method->isPureVirtual()) + return true; + } + } + return false; + }; + + if (FinalOverriders) + return ExistsIn(*FinalOverriders); + CXXFinalOverriderMap MyFinalOverriders; + RD.getFinalOverriders(MyFinalOverriders); + return ExistsIn(MyFinalOverriders); ---------------- MitalAshok wrote:
Thoughts on moving this to the front like: ```c++ static bool hasPureVirtualFinalOverrider( const CXXRecordDecl &RD, const CXXFinalOverriderMap *FinalOverriders) { if (!FinalOverriders) { CXXFinalOverriderMap MyFinalOverriders; RD.getFinalOverriders(MyFinalOverriders); return hasPureVirtualFinalOverrider(RD, &MyFinalOverriders); } for (/*...*/) { // ... } return false; } ``` ? This also gets rid of the lambda https://github.com/llvm/llvm-project/pull/96831 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits