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