[clang] [clang] make it possible to disable c++26 type aware allocators (PR #138372)

via cfe-commits cfe-commits at lists.llvm.org
Fri May 2 18:55:16 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-driver

Author: Oliver Hunt (ojhunt)

<details>
<summary>Changes</summary>

Per the feedback from the Clang Area Team, this PR makes P2719 only on by default when targeting C++26, and adds a flag to explicitly enable or disable support.

---

Patch is 60.11 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/138372.diff


16 Files Affected:

- (modified) clang/docs/ReleaseNotes.rst (+2) 
- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+3) 
- (modified) clang/include/clang/Basic/LangOptions.def (+1) 
- (modified) clang/include/clang/Driver/Options.td (+6) 
- (modified) clang/lib/CodeGen/CGExprCXX.cpp (+1) 
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (+5) 
- (modified) clang/lib/Frontend/InitPreprocessor.cpp (+2-1) 
- (modified) clang/lib/Sema/SemaDeclCXX.cpp (+56-43) 
- (modified) clang/lib/Sema/SemaExprCXX.cpp (+2-2) 
- (modified) clang/test/CodeGenCXX/type-aware-allocators.cpp (+5-5) 
- (modified) clang/test/CodeGenCXX/type-aware-coroutines.cpp (+1-1) 
- (modified) clang/test/CodeGenCXX/type-aware-placement-operators.cpp (+4-4) 
- (modified) clang/test/PCH/type-aware-destroying-new-and-delete-pch.cpp (+2-2) 
- (modified) clang/test/SemaCXX/type-aware-coroutines.cpp (+18-1) 
- (modified) clang/test/SemaCXX/type-aware-new-delete-basic-free-declarations.cpp (+67-7) 
- (modified) clang/test/SemaCXX/type-aware-new-delete-basic-in-class-declarations.cpp (+52-6) 


``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 4bd9d904e1ea9..53fb4e640a351 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -110,6 +110,8 @@ C++2c Feature Support
 - Implemented `P0963R3 Structured binding declaration as a condition <https://wg21.link/P0963R3>`_.
 
 - Implemented `P2719R4 Type-aware allocation and deallocation functions <https://wg21.link/P2719>`_.
+  This is enabled by default when targeting C++2c, and can be enabled or disabled by
+  the ``-fcxx-type-aware-allocators`` and ``-fno-cxx-type-aware-allocators`` options.
 
 C++23 Feature Support
 ^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index e5a7cdc14a737..eb28f0ce9c8fd 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -9956,6 +9956,9 @@ def warn_cxx26_type_aware_allocators : Warning<
 def err_type_aware_allocator_missing_matching_operator : Error<
   "declaration of type aware %0 in %1 must have matching type aware %2"
 >;
+def err_type_aware_allocators_disabled
+    : Error<"type aware %0 declared but type aware allocator support is "
+            "disabled. Pass -fcxx-type-aware-allocators to enable it">;
 def note_unmatched_type_aware_allocator_declared : Note<
   "unmatched type aware %0 declared here">;
 def err_mismatching_type_aware_cleanup_deallocator : Error<
diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def
index 930c1c06d1a76..7dc817119c9ac 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -314,6 +314,7 @@ LANGOPT(SizedDeallocation , 1, 0, "sized deallocation")
 LANGOPT(AlignedAllocation , 1, 0, "aligned allocation")
 LANGOPT(AlignedAllocationUnavailable, 1, 0, "aligned allocation functions are unavailable")
 LANGOPT(NewAlignOverride  , 32, 0, "maximum alignment guaranteed by '::operator new(size_t)'")
+LANGOPT(CXXTypeAwareAllocators, 1, 0, "type aware allocators")
 BENIGN_LANGOPT(ModulesCodegen , 1, 0, "Modules code generation")
 BENIGN_LANGOPT(ModulesDebugInfo , 1, 0, "Modules debug info")
 BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision")
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 736088a70d189..cea63f2636152 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3539,6 +3539,12 @@ def : Separate<["-"], "fnew-alignment">, Alias<fnew_alignment_EQ>;
 def : Flag<["-"], "faligned-new">, Alias<faligned_allocation>;
 def : Flag<["-"], "fno-aligned-new">, Alias<fno_aligned_allocation>;
 def faligned_new_EQ : Joined<["-"], "faligned-new=">;
+defm cxx_type_aware_allocators
+    : BoolFOption<"cxx-type-aware-allocators",
+                  LangOpts<"CXXTypeAwareAllocators">, Default<cpp26.KeyPath>,
+                  PosFlag<SetTrue, [], [],
+                          "Enable support for C++26's type aware allocators">,
+                  NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>;
 
 def fobjc_legacy_dispatch : Flag<["-"], "fobjc-legacy-dispatch">, Group<f_Group>;
 def fobjc_new_property : Flag<["-"], "fobjc-new-property">, Group<clang_ignored_f_Group>;
diff --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp
index 3e8c42d5a6f4b..eaa513313e182 100644
--- a/clang/lib/CodeGen/CGExprCXX.cpp
+++ b/clang/lib/CodeGen/CGExprCXX.cpp
@@ -1487,6 +1487,7 @@ namespace {
       TypeAwareAllocationMode TypeAwareDeallocation =
           TypeAwareAllocationMode::No;
       if (OperatorDelete->isTypeAwareOperatorNewOrDelete()) {
+        assert(CGF.getLangOpts().CXXTypeAwareAllocators);
         TypeAwareDeallocation = TypeAwareAllocationMode::Yes;
         QualType SpecializedTypeIdentity = FPT->getParamType(0);
         ++FirstNonTypeArg;
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 6dabf9d842b7b..d2788a0973ed4 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -7516,6 +7516,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   Args.addLastArg(CmdArgs, options::OPT_fsized_deallocation,
                   options::OPT_fno_sized_deallocation);
 
+  // -fcxx-type-aware-allocators is on by default in C++26 onwards and otherwise
+  // off by default.
+  Args.addLastArg(CmdArgs, options::OPT_fcxx_type_aware_allocators,
+                  options::OPT_fno_cxx_type_aware_allocators);
+
   // -faligned-allocation is on by default in C++17 onwards and otherwise off
   // by default.
   if (Arg *A = Args.getLastArg(options::OPT_faligned_allocation,
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 1f297f228fc1b..6d95c7d0e4c4e 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -778,7 +778,8 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
   Builder.defineMacro("__cpp_impl_destroying_delete", "201806L");
 
   // TODO: Final number?
-  Builder.defineMacro("__cpp_type_aware_allocators", "202500L");
+  if (LangOpts.CXXTypeAwareAllocators)
+    Builder.defineMacro("__cpp_type_aware_allocators", "202500L");
 }
 
 /// InitializeOpenCLFeatureTestMacros - Define OpenCL macros based on target
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 22e21524c54be..a574508e18a05 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -7326,47 +7326,50 @@ void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {
       checkCUDADeviceBuiltinTextureClassTemplate(*this, Record);
   }
 
-  llvm::SmallDenseMap<OverloadedOperatorKind,
-                      llvm::SmallVector<const FunctionDecl *, 2>, 4>
-      TypeAwareDecls{{OO_New, {}},
-                     {OO_Array_New, {}},
-                     {OO_Delete, {}},
-                     {OO_Array_New, {}}};
-  for (auto *D : Record->decls()) {
-    const FunctionDecl *FnDecl = D->getAsFunction();
-    if (!FnDecl || !FnDecl->isTypeAwareOperatorNewOrDelete())
-      continue;
-    assert(FnDecl->getDeclName().isAnyOperatorNewOrDelete());
-    TypeAwareDecls[FnDecl->getOverloadedOperator()].push_back(FnDecl);
-  }
-  auto CheckMismatchedTypeAwareAllocators =
-      [this, &TypeAwareDecls, Record](OverloadedOperatorKind NewKind,
-                                      OverloadedOperatorKind DeleteKind) {
-        auto &NewDecls = TypeAwareDecls[NewKind];
-        auto &DeleteDecls = TypeAwareDecls[DeleteKind];
-        if (NewDecls.empty() == DeleteDecls.empty())
-          return;
-        DeclarationName FoundOperator =
-            Context.DeclarationNames.getCXXOperatorName(
-                NewDecls.empty() ? DeleteKind : NewKind);
-        DeclarationName MissingOperator =
-            Context.DeclarationNames.getCXXOperatorName(
-                NewDecls.empty() ? NewKind : DeleteKind);
-        Diag(Record->getLocation(),
-             diag::err_type_aware_allocator_missing_matching_operator)
-            << FoundOperator << Context.getRecordType(Record)
-            << MissingOperator;
-        for (auto MD : NewDecls)
-          Diag(MD->getLocation(),
-               diag::note_unmatched_type_aware_allocator_declared)
-              << MD;
-        for (auto MD : DeleteDecls)
-          Diag(MD->getLocation(),
-               diag::note_unmatched_type_aware_allocator_declared)
-              << MD;
-      };
-  CheckMismatchedTypeAwareAllocators(OO_New, OO_Delete);
-  CheckMismatchedTypeAwareAllocators(OO_Array_New, OO_Array_Delete);
+  if (getLangOpts().CXXTypeAwareAllocators) {
+    llvm::SmallDenseMap<OverloadedOperatorKind,
+                        llvm::SmallVector<const FunctionDecl *, 2>, 4>
+        TypeAwareDecls{{OO_New, {}},
+                       {OO_Array_New, {}},
+                       {OO_Delete, {}},
+                       {OO_Array_New, {}}};
+    for (auto *D : Record->decls()) {
+      const FunctionDecl *FnDecl = D->getAsFunction();
+      if (!FnDecl || !FnDecl->isTypeAwareOperatorNewOrDelete())
+        continue;
+      assert(FnDecl->getDeclName().isAnyOperatorNewOrDelete());
+      TypeAwareDecls[FnDecl->getOverloadedOperator()].push_back(FnDecl);
+    }
+
+    auto CheckMismatchedTypeAwareAllocators =
+        [this, &TypeAwareDecls, Record](OverloadedOperatorKind NewKind,
+                                        OverloadedOperatorKind DeleteKind) {
+          auto &NewDecls = TypeAwareDecls[NewKind];
+          auto &DeleteDecls = TypeAwareDecls[DeleteKind];
+          if (NewDecls.empty() == DeleteDecls.empty())
+            return;
+          DeclarationName FoundOperator =
+              Context.DeclarationNames.getCXXOperatorName(
+                  NewDecls.empty() ? DeleteKind : NewKind);
+          DeclarationName MissingOperator =
+              Context.DeclarationNames.getCXXOperatorName(
+                  NewDecls.empty() ? NewKind : DeleteKind);
+          Diag(Record->getLocation(),
+               diag::err_type_aware_allocator_missing_matching_operator)
+              << FoundOperator << Context.getRecordType(Record)
+              << MissingOperator;
+          for (auto MD : NewDecls)
+            Diag(MD->getLocation(),
+                 diag::note_unmatched_type_aware_allocator_declared)
+                << MD;
+          for (auto MD : DeleteDecls)
+            Diag(MD->getLocation(),
+                 diag::note_unmatched_type_aware_allocator_declared)
+                << MD;
+        };
+    CheckMismatchedTypeAwareAllocators(OO_New, OO_Delete);
+    CheckMismatchedTypeAwareAllocators(OO_Array_New, OO_Array_Delete);
+  }
 }
 
 /// Look up the special member function that would be called by a special
@@ -16439,7 +16442,8 @@ bool Sema::CompleteConstructorCall(CXXConstructorDecl *Constructor,
 
 TypeAwareAllocationMode Sema::ShouldUseTypeAwareOperatorNewOrDelete() const {
   bool SeenTypedOperators = Context.hasSeenTypeAwareOperatorNewOrDelete();
-  return typeAwareAllocationModeFromBool(SeenTypedOperators);
+  return typeAwareAllocationModeFromBool(getLangOpts().CXXTypeAwareAllocators &&
+                                         SeenTypedOperators);
 }
 
 FunctionDecl *
@@ -16587,6 +16591,11 @@ static inline bool CheckOperatorNewDeleteTypes(
   unsigned MinimumMandatoryArgumentCount = 1;
   unsigned SizeParameterIndex = 0;
   if (IsPotentiallyTypeAware) {
+    if (!SemaRef.getLangOpts().CXXTypeAwareAllocators)
+      return SemaRef.Diag(FnDecl->getLocation(),
+                          diag::err_type_aware_allocators_disabled)
+             << FnDecl->getDeclName();
+
     // We don't emit this diagnosis for template instantiations as we will
     // have already emitted it for the original template declaration.
     if (!FnDecl->isTemplateInstantiation()) {
@@ -16699,7 +16708,7 @@ static inline bool CheckOperatorNewDeleteTypes(
     return true;
 
   FnDecl->setIsTypeAwareOperatorNewOrDelete();
-  return MalformedTypeIdentity;
+  return MalformedTypeIdentity || !SemaRef.getLangOpts().CXXTypeAwareAllocators;
 }
 
 static bool CheckOperatorNewDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
@@ -16746,6 +16755,10 @@ CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {
   // pile of incorrect parameter type errors.
   if (MD && IsPotentiallyTypeAwareOperatorNewOrDelete(
                 SemaRef, MD, /*WasMalformed=*/nullptr)) {
+    if (!SemaRef.getLangOpts().CXXTypeAwareAllocators)
+      return SemaRef.Diag(FnDecl->getLocation(),
+                          diag::err_type_aware_allocators_disabled)
+             << FnDecl->getDeclName();
     QualType AddressParamType =
         SemaRef.Context.getCanonicalType(MD->getParamDecl(1)->getType());
     if (AddressParamType != SemaRef.Context.VoidPtrTy &&
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 235ea1529b0b8..ee01411729cd8 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -1768,7 +1768,7 @@ namespace {
       // A function template declaration is only a usual deallocation function
       // if it is a typed delete.
       if (!FD) {
-        if (AllocType.isNull())
+        if (AllocType.isNull() || !S.getLangOpts().CXXTypeAwareAllocators)
           return;
         auto *FTD = dyn_cast<FunctionTemplateDecl>(Found->getUnderlyingDecl());
         if (!FTD)
@@ -1786,7 +1786,7 @@ namespace {
         // type being deallocated, or if the type-identity parameter of the
         // deallocation function does not match the constructed type_identity
         // specialization we reject the declaration.
-        if (AllocType.isNull()) {
+        if (AllocType.isNull() || !S.getLangOpts().CXXTypeAwareAllocators) {
           FD = nullptr;
           return;
         }
diff --git a/clang/test/CodeGenCXX/type-aware-allocators.cpp b/clang/test/CodeGenCXX/type-aware-allocators.cpp
index cce9197ed0d12..7b49f1537db8a 100644
--- a/clang/test/CodeGenCXX/type-aware-allocators.cpp
+++ b/clang/test/CodeGenCXX/type-aware-allocators.cpp
@@ -1,14 +1,14 @@
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx    -fsized-deallocation    -faligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_SIZED_ALIGNED  %s
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx -fno-sized-deallocation    -faligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_NO_SIZE_ALIGNED %s
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx -fno-sized-deallocation -fno-aligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_NO_SIZE_NO_ALIGN %s
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx    -fsized-deallocation -fno-aligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_SIZED_NO_ALIGN %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -fcxx-type-aware-allocators    -fsized-deallocation    -faligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_SIZED_ALIGNED  %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -fcxx-type-aware-allocators -fno-sized-deallocation    -faligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_NO_SIZE_ALIGNED %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -fcxx-type-aware-allocators -fno-sized-deallocation -fno-aligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_NO_SIZE_NO_ALIGN %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -fcxx-type-aware-allocators    -fsized-deallocation -fno-aligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -o - -Wno-c++26-extensions | FileCheck --check-prefixes=CHECK,CHECK_SIZED_NO_ALIGN %s
+
 // Test default behaviour with c++26
 // RUN: %clang_cc1 %s -triple arm64-apple-macosx    -fsized-deallocation    -faligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++26 -o -  | FileCheck --check-prefixes=CHECK,CHECK_SIZED_ALIGNED  %s
 // RUN: %clang_cc1 %s -triple arm64-apple-macosx -fno-sized-deallocation    -faligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++26 -o -  | FileCheck --check-prefixes=CHECK,CHECK_NO_SIZE_ALIGNED %s
 // RUN: %clang_cc1 %s -triple arm64-apple-macosx -fno-sized-deallocation -fno-aligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++26 -o -  | FileCheck --check-prefixes=CHECK,CHECK_NO_SIZE_NO_ALIGN %s
 // RUN: %clang_cc1 %s -triple arm64-apple-macosx    -fsized-deallocation -fno-aligned-allocation -emit-llvm -fcxx-exceptions -fexceptions -std=c++26 -o -  | FileCheck --check-prefixes=CHECK,CHECK_SIZED_NO_ALIGN %s
 
-
 namespace std {
   template <class T> struct type_identity {
     typedef T type;
diff --git a/clang/test/CodeGenCXX/type-aware-coroutines.cpp b/clang/test/CodeGenCXX/type-aware-coroutines.cpp
index 0a19079d987e9..5ac314dbb5e2f 100644
--- a/clang/test/CodeGenCXX/type-aware-coroutines.cpp
+++ b/clang/test/CodeGenCXX/type-aware-coroutines.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple arm64-apple-macosx  %s -std=c++23 -fcoroutines -fexceptions -emit-llvm  -Wno-coro-type-aware-allocation-function -o - | FileCheck %s
+// RUN: %clang_cc1 -triple arm64-apple-macosx  %s -std=c++23 -fcxx-type-aware-allocators -fcoroutines -fexceptions -emit-llvm  -Wno-coro-type-aware-allocation-function -o - | FileCheck %s
 // RUN: %clang_cc1 -triple arm64-apple-macosx  %s -std=c++26 -fcoroutines -fexceptions -emit-llvm  -Wno-coro-type-aware-allocation-function -o - | FileCheck %s
 
 #include "Inputs/std-coroutine.h"
diff --git a/clang/test/CodeGenCXX/type-aware-placement-operators.cpp b/clang/test/CodeGenCXX/type-aware-placement-operators.cpp
index 858db62ffcfb0..ec34b1077b749 100644
--- a/clang/test/CodeGenCXX/type-aware-placement-operators.cpp
+++ b/clang/test/CodeGenCXX/type-aware-placement-operators.cpp
@@ -1,7 +1,7 @@
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23    -fsized-deallocation    -faligned-allocation -o - | FileCheck %s
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -fno-sized-deallocation    -faligned-allocation -o - | FileCheck %s
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23    -fsized-deallocation -fno-aligned-allocation -o - | FileCheck %s
-// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -fno-aligned-allocation -fno-sized-deallocation -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -fcxx-type-aware-allocators    -fsized-deallocation    -faligned-allocation -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -fcxx-type-aware-allocators -fno-sized-deallocation    -faligned-allocation -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -fcxx-type-aware-allocators    -fsized-deallocation -fno-aligned-allocation -o - | FileCheck %s
+// RUN: %clang_cc1 %s -triple arm64-apple-macosx -emit-llvm -fcxx-exceptions -fexceptions -std=c++23 -fcxx-type-aware-allocators -fno-aligned-allocation -fno-sized-deallocation -o - | FileCheck %s
 
 namespace std {
   template <class T> struct type_identity {};
diff --git a/clang/test/PCH/type-aware-destroying-new-and-delete-pch.cpp b/clang/test/PCH/type-aware-destroying-new-and-delete-pch.cpp
index d8f7f5dd50c78..b542b03b8b4fb 100644
--- a/clang/test/PCH/type-aware-destroying-new-and-delete-pch.cpp
+++ b/clang/test/PCH/type-aware-destroying-new-and-delete-pch.cpp
@@ -5,8 +5,8 @@
 // RUN: %clang_cc1 -x c++ -std=c++26 -emit-pch -o %t %S/Inputs/type_aware_destroying_new_delete.h
 // RUN: %clang_cc1 -x c++ -std=c++26 -include-pch %t -emit-llvm -o - %s 
 
-// RUN: %clang_cc1 -x c++ -std=c++11 -emit-pch -fpch-instantiate-templates -o %t %S/Inputs/type_aware_destroying_new_delete.h
-// RUN: %clang_cc1 -x c++ -std=c++11 -include-pch %t -emit-llvm -o - %s
+// RUN: %clang_cc1 -x c++ -std=c++11 -fcxx-type-aware-allocators -emit-pch -fpch-instantiate-templates -o %t %S/Inputs/type_aware_destroying_new_delete.h
+// RUN: %clang_cc1 -x c++ -std=c++11 -fcxx-type-aware-allocators -include-pch %t -emit-llvm -o - %s
 
 
 static void call_in_pch_function(void) {
diff --git a/clang/test/SemaCXX/type-aware-coroutines.cpp b/clang/test/SemaCXX/type-aware-coroutines.cpp
index a54d37c47dbd9..3ec3d3953db45 100644
--- a/clang/test/SemaCXX/type-aware-coroutines.cpp
+++ b/clang/test/SemaCXX/type-aware-coroutines.cpp
@@ -1,4 +1,6 @@
-// RUN: %clang_cc1 -triple arm64-apple-macosx -fsyntax-only -verify %s -std=c++26 -fcoroutines -fexceptions -Wall -Wpedantic
+// RUN: %clang_cc1 -triple arm64-apple-macosx -fsyntax-only -verify %s -std=c++26 -fcoroutines                                -fexceptions -Wall -Wpedantic
+// Ty...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/138372


More information about the cfe-commits mailing list