diff options
author | Matheus Izvekov <mizvekov@gmail.com> | 2025-08-25 20:18:56 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-25 20:18:56 -0300 |
commit | dc8596d5485a52abee2967cec72f81ef4872270c (patch) | |
tree | 5d0b5cbc1fed95f3b9aae2b39387c0f2b4d0e47c /clang/lib/Sema/Sema.cpp | |
parent | 1ba8b36fef84bedb0a657b570076ec1a47e9061d (diff) | |
download | llvm-dc8596d5485a52abee2967cec72f81ef4872270c.zip llvm-dc8596d5485a52abee2967cec72f81ef4872270c.tar.gz llvm-dc8596d5485a52abee2967cec72f81ef4872270c.tar.bz2 |
[clang] NFC: change more places to use Type::getAsTagDecl and friends (#155313)
This changes a bunch of places which use getAs<TagType>, including
derived types, just to obtain the tag definition.
This is preparation for #155028, offloading all the changes that PR used
to introduce which don't depend on any new helpers.
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
-rw-r--r-- | clang/lib/Sema/Sema.cpp | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index b870c5a..39fa25f 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -1882,23 +1882,21 @@ public: // 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->getOriginalDecl())) - if (const auto *Def = ClassDecl->getDefinition()) - if (CXXDestructorDecl *MemberDtor = Def->getDestructor()) - asImpl().visitUsedDecl(MemberDtor->getLocation(), MemberDtor); + if (const auto *ClassDecl = FT->getAsCXXRecordDecl(); + ClassDecl && + (ClassDecl->isBeingDefined() || ClassDecl->isCompleteDefinition())) + 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->getOriginalDecl())) - if (const auto *Def = BaseDecl->getDefinition()) - if (CXXDestructorDecl *BaseDtor = Def->getDestructor()) - asImpl().visitUsedDecl(BaseDtor->getLocation(), BaseDtor); + if (const auto *BaseDecl = BaseType->getAsCXXRecordDecl(); + BaseDecl && + (BaseDecl->isBeingDefined() || BaseDecl->isCompleteDefinition())) + if (CXXDestructorDecl *BaseDtor = BaseDecl->getDestructor()) + asImpl().visitUsedDecl(BaseDtor->getLocation(), BaseDtor); } } @@ -1909,12 +1907,11 @@ public: if (VD->isThisDeclarationADefinition() && VD->needsDestruction(S.Context)) { QualType VT = VD->getType(); - if (const auto *RT = VT->getAs<RecordType>()) - if (const auto *ClassDecl = - dyn_cast<CXXRecordDecl>(RT->getOriginalDecl())) - if (const auto *Def = ClassDecl->getDefinition()) - if (CXXDestructorDecl *Dtor = Def->getDestructor()) - asImpl().visitUsedDecl(Dtor->getLocation(), Dtor); + if (const auto *ClassDecl = VT->getAsCXXRecordDecl(); + ClassDecl && (ClassDecl->isBeingDefined() || + ClassDecl->isCompleteDefinition())) + if (CXXDestructorDecl *Dtor = ClassDecl->getDestructor()) + asImpl().visitUsedDecl(Dtor->getLocation(), Dtor); } Inherited::VisitDeclStmt(DS); |