@@ -13337,6 +13337,71 @@ bool ASTContext::isTypeAwareOperatorNewOrDelete(const FunctionDecl *FD) const {
1333713337 return TypeAwareOperatorNewAndDeletes.contains(FD->getCanonicalDecl());
1333813338}
1333913339
13340+ void ASTContext::addOperatorDeleteForVDtor(const CXXDestructorDecl *Dtor,
13341+ FunctionDecl *OperatorDelete,
13342+ OperatorDeleteKind K) const {
13343+ switch (K) {
13344+ case OperatorDeleteKind::Regular:
13345+ OperatorDeletesForVirtualDtor[Dtor->getCanonicalDecl()] = OperatorDelete;
13346+ break;
13347+ case OperatorDeleteKind::GlobalRegular:
13348+ GlobalOperatorDeletesForVirtualDtor[Dtor->getCanonicalDecl()] =
13349+ OperatorDelete;
13350+ break;
13351+ case OperatorDeleteKind::Array:
13352+ ArrayOperatorDeletesForVirtualDtor[Dtor->getCanonicalDecl()] =
13353+ OperatorDelete;
13354+ break;
13355+ case OperatorDeleteKind::ArrayGlobal:
13356+ GlobalArrayOperatorDeletesForVirtualDtor[Dtor->getCanonicalDecl()] =
13357+ OperatorDelete;
13358+ break;
13359+ }
13360+ }
13361+
13362+ bool ASTContext::dtorHasOperatorDelete(const CXXDestructorDecl *Dtor,
13363+ OperatorDeleteKind K) const {
13364+ switch (K) {
13365+ case OperatorDeleteKind::Regular:
13366+ return OperatorDeletesForVirtualDtor.contains(Dtor->getCanonicalDecl());
13367+ case OperatorDeleteKind::GlobalRegular:
13368+ return GlobalOperatorDeletesForVirtualDtor.contains(
13369+ Dtor->getCanonicalDecl());
13370+ case OperatorDeleteKind::Array:
13371+ return ArrayOperatorDeletesForVirtualDtor.contains(
13372+ Dtor->getCanonicalDecl());
13373+ case OperatorDeleteKind::ArrayGlobal:
13374+ return GlobalArrayOperatorDeletesForVirtualDtor.contains(
13375+ Dtor->getCanonicalDecl());
13376+ }
13377+ return false;
13378+ }
13379+
13380+ FunctionDecl *
13381+ ASTContext::getOperatorDeleteForVDtor(const CXXDestructorDecl *Dtor,
13382+ OperatorDeleteKind K) const {
13383+ const CXXDestructorDecl *Canon = Dtor->getCanonicalDecl();
13384+ switch (K) {
13385+ case OperatorDeleteKind::Regular:
13386+ if (OperatorDeletesForVirtualDtor.contains(Canon))
13387+ return OperatorDeletesForVirtualDtor[Canon];
13388+ return nullptr;
13389+ case OperatorDeleteKind::GlobalRegular:
13390+ if (GlobalOperatorDeletesForVirtualDtor.contains(Canon))
13391+ return GlobalOperatorDeletesForVirtualDtor[Canon];
13392+ return nullptr;
13393+ case OperatorDeleteKind::Array:
13394+ if (ArrayOperatorDeletesForVirtualDtor.contains(Canon))
13395+ return ArrayOperatorDeletesForVirtualDtor[Canon];
13396+ return nullptr;
13397+ case OperatorDeleteKind::ArrayGlobal:
13398+ if (GlobalArrayOperatorDeletesForVirtualDtor.contains(Canon))
13399+ return GlobalArrayOperatorDeletesForVirtualDtor[Canon];
13400+ return nullptr;
13401+ }
13402+ return nullptr;
13403+ }
13404+
1334013405MangleNumberingContext &
1334113406ASTContext::getManglingNumberContext(const DeclContext *DC) {
1334213407 assert(LangOpts.CPlusPlus); // We don't need mangling numbers for plain C.
0 commit comments