================ @@ -1798,6 +1798,62 @@ class DeferredDiagnosticsEmitter Inherited::visitUsedDecl(Loc, D); } + // Visitor member and parent dtors called by this dtor. + void VisitCalledDestructors(CXXDestructorDecl *DD) { + const CXXRecordDecl *RD = DD->getParent(); + + // Visit the dtors of all members + for (const FieldDecl *FD : RD->fields()) { + QualType FT = FD->getType(); + if (const auto *RT = FT->getAs<RecordType>()) { + if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { + if (ClassDecl->hasDefinition()) { + if (CXXDestructorDecl *MemberDtor = ClassDecl->getDestructor()) { + asImpl().visitUsedDecl(MemberDtor->getLocation(), MemberDtor); + } + } + } + } + } + + // Also visit base class dtors + for (const auto &Base : RD->bases()) { + QualType BaseType = Base.getType(); + if (const auto *RT = BaseType->getAs<RecordType>()) { + if (const auto *BaseDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { + if (BaseDecl->hasDefinition()) { + if (CXXDestructorDecl *BaseDtor = BaseDecl->getDestructor()) { + asImpl().visitUsedDecl(BaseDtor->getLocation(), BaseDtor); + } + } + } + } ---------------- Artem-B wrote:
Ditto. https://github.com/llvm/llvm-project/pull/129117 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits