[clang] [RFC] Initial implementation of P2719 (PR #113510)
Oliver Hunt via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 1 22:48:34 PDT 2025
================
@@ -16110,6 +16128,127 @@ bool Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
return Invalid;
}
+bool Sema::IsTypeIdentitySpecialization(QualType Type) const {
+ auto *TypeIdentity = getStdTypeIdentity();
+ if (!TypeIdentity)
+ return false;
+ auto *SpecializedDecl = Type->getSpecializedTemplateDecl();
+ return TypeIdentity == SpecializedDecl;
+}
+
+bool Sema::IsTypeAwareOperatorNewOrDelete(const FunctionDecl *FnDecl) const {
+ // Type aware operators
+ if (FnDecl->getNumParams() < 2)
+ return false;
+ const auto *ParamDecl = FnDecl->getParamDecl(0);
+ return IsTypeIdentitySpecialization(ParamDecl->getType());
+}
+
+bool Sema::IsTypeAwareOperatorNewOrDelete(
+ const FunctionTemplateDecl *FTD) const {
+ return IsTypeAwareOperatorNewOrDelete(FTD->getTemplatedDecl());
+}
+
+bool Sema::IsTypeAwareOperatorNewOrDelete(const NamedDecl *ND) const {
+ if (auto *FTD = dyn_cast<FunctionTemplateDecl>(ND))
+ return IsTypeAwareOperatorNewOrDelete(FTD->getTemplatedDecl());
+ if (auto *FnDecl = dyn_cast<FunctionDecl>(ND))
+ return IsTypeAwareOperatorNewOrDelete(FnDecl);
+ return false;
+}
+
+std::optional<FunctionDecl *>
+Sema::InstantiateTypeAwareUsualDelete(FunctionTemplateDecl *FnTemplateDecl,
+ QualType DeallocType) {
+ if (!AllowTypeAwareAllocators())
+ return std::nullopt;
+
+ auto TemplateParameters = FnTemplateDecl->getTemplateParameters();
----------------
ojhunt wrote:
Done.
<!-- Reviewable comment -OMozhwV8LOLABuUfvIX:b-896fix -->
<!-- Sent from Reviewable.io -->
https://github.com/llvm/llvm-project/pull/113510
More information about the cfe-commits
mailing list