[clang] [RFC] Initial implementation of P2719 (PR #113510)
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 1 07:07:43 PDT 2024
================
@@ -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();
----------------
AaronBallman wrote:
Spell out the type (I'll stop commenting on those -- if the type is not spelled out in the initializer explicitly, you should spell out the type instead of using auto, unless the type is incredibly obvious and stupid to spell out, like with iterators)
https://github.com/llvm/llvm-project/pull/113510
More information about the cfe-commits
mailing list