[libcxx-commits] [libcxx] [libc++] Drop transitive includes by default (PR #195509)

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Sun May 3 03:39:48 PDT 2026


https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/195509

>From a8a7b1a986ac179a60abc317ba3aa32042ae6257 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Sun, 3 May 2026 10:20:52 +0200
Subject: [PATCH] [libc++] Drop transitive includes by default

---
 libcxx/docs/ReleaseNotes/23.rst                           | 6 ++++++
 libcxx/include/algorithm                                  | 4 ++--
 libcxx/include/any                                        | 6 +++---
 libcxx/include/array                                      | 2 +-
 libcxx/include/atomic                                     | 2 +-
 libcxx/include/barrier                                    | 2 +-
 libcxx/include/bit                                        | 2 +-
 libcxx/include/bitset                                     | 2 +-
 libcxx/include/charconv                                   | 2 +-
 libcxx/include/chrono                                     | 6 +++---
 libcxx/include/cmath                                      | 2 +-
 libcxx/include/codecvt                                    | 2 +-
 libcxx/include/compare                                    | 2 +-
 libcxx/include/complex                                    | 2 +-
 libcxx/include/concepts                                   | 2 +-
 libcxx/include/condition_variable                         | 2 +-
 libcxx/include/coroutine                                  | 2 +-
 libcxx/include/cwchar                                     | 2 +-
 libcxx/include/deque                                      | 2 +-
 libcxx/include/exception                                  | 4 ++--
 libcxx/include/execution                                  | 2 +-
 libcxx/include/experimental/iterator                      | 4 ++--
 libcxx/include/experimental/memory                        | 2 +-
 libcxx/include/experimental/propagate_const               | 2 +-
 libcxx/include/experimental/simd                          | 2 +-
 libcxx/include/experimental/type_traits                   | 2 +-
 libcxx/include/experimental/utility                       | 2 +-
 libcxx/include/ext/hash_map                               | 2 +-
 libcxx/include/ext/hash_set                               | 2 +-
 libcxx/include/filesystem                                 | 2 +-
 libcxx/include/format                                     | 4 ++--
 libcxx/include/forward_list                               | 2 +-
 libcxx/include/fstream                                    | 4 ++--
 libcxx/include/functional                                 | 8 ++++----
 libcxx/include/future                                     | 4 ++--
 libcxx/include/initializer_list                           | 2 +-
 libcxx/include/iomanip                                    | 4 ++--
 libcxx/include/ios                                        | 2 +-
 libcxx/include/istream                                    | 4 ++--
 libcxx/include/iterator                                   | 4 ++--
 libcxx/include/latch                                      | 2 +-
 libcxx/include/limits                                     | 2 +-
 libcxx/include/list                                       | 2 +-
 libcxx/include/locale                                     | 2 +-
 libcxx/include/map                                        | 2 +-
 libcxx/include/memory                                     | 2 +-
 libcxx/include/memory_resource                            | 4 ++--
 libcxx/include/mutex                                      | 4 ++--
 libcxx/include/new                                        | 2 +-
 libcxx/include/numbers                                    | 2 +-
 libcxx/include/numeric                                    | 4 ++--
 libcxx/include/optional                                   | 2 +-
 libcxx/include/ostream                                    | 4 ++--
 libcxx/include/queue                                      | 2 +-
 libcxx/include/random                                     | 2 +-
 libcxx/include/ranges                                     | 2 +-
 libcxx/include/ratio                                      | 2 +-
 libcxx/include/regex                                      | 2 +-
 libcxx/include/scoped_allocator                           | 2 +-
 libcxx/include/semaphore                                  | 2 +-
 libcxx/include/set                                        | 2 +-
 libcxx/include/shared_mutex                               | 2 +-
 libcxx/include/span                                       | 2 +-
 libcxx/include/sstream                                    | 2 +-
 libcxx/include/stack                                      | 2 +-
 libcxx/include/stdexcept                                  | 2 +-
 libcxx/include/stop_token                                 | 2 +-
 libcxx/include/streambuf                                  | 2 +-
 libcxx/include/string                                     | 2 +-
 libcxx/include/string_view                                | 2 +-
 libcxx/include/system_error                               | 2 +-
 libcxx/include/thread                                     | 4 ++--
 libcxx/include/tuple                                      | 2 +-
 libcxx/include/typeindex                                  | 2 +-
 libcxx/include/typeinfo                                   | 2 +-
 libcxx/include/unordered_map                              | 2 +-
 libcxx/include/unordered_set                              | 2 +-
 libcxx/include/utility                                    | 7 ++-----
 libcxx/include/valarray                                   | 2 +-
 libcxx/include/variant                                    | 2 +-
 libcxx/include/vector                                     | 4 ++--
 libcxx/test/libcxx/transitive_includes.gen.py             | 4 ++--
 .../util.smartptr.weak.const/pr40459.pass.cpp             | 6 +-----
 83 files changed, 112 insertions(+), 113 deletions(-)

diff --git a/libcxx/docs/ReleaseNotes/23.rst b/libcxx/docs/ReleaseNotes/23.rst
index ef95fc5c0f43c..12cd2b78bf7cc 100644
--- a/libcxx/docs/ReleaseNotes/23.rst
+++ b/libcxx/docs/ReleaseNotes/23.rst
@@ -58,6 +58,7 @@ Improvements and New Features
   for ``std::deque<int>`` iterators.
 - ``std::copy(CharT*, CharT*, ostreambuf_iterator<CharT>)`` has been optimized, resulting in performance improvements
   of up to 25x.
+- A lot of transitive includes have been removed, resulting in significant compile time improvements.
 
 Deprecations and Removals
 -------------------------
@@ -74,6 +75,11 @@ Deprecations and Removals
 Potentially breaking changes
 ----------------------------
 
+- libc++ has dropped a lot of transitive includes in all language modes. This improves compile time significantly, but
+  causes programs which rely in these includes to not compile anymore. Any errors caused by this should be fixable by
+  including the correct header. To ease the transition ``_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23`` can be defined, which
+  includes the removed headers again. This macro will be removed in LLVM 24.
+
 Announcements About Future Releases
 -----------------------------------
 
diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm
index 2418d03d69f11..815b2b4f1c32f 100644
--- a/libcxx/include/algorithm
+++ b/libcxx/include/algorithm
@@ -2086,11 +2086,11 @@ template <class BidirectionalIterator, class Compare>
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 14
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER == 14
 #    include <execution>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <bit>
 #    include <concepts>
diff --git a/libcxx/include/any b/libcxx/include/any
index d9368df75296e..4caff01ce7c02 100644
--- a/libcxx/include/any
+++ b/libcxx/include/any
@@ -556,11 +556,11 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 17
 #    include <chrono>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdlib>
@@ -572,7 +572,7 @@ _LIBCPP_POP_MACROS
 #    include <variant>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <cstring>
 #    include <limits>
 #  endif
diff --git a/libcxx/include/array b/libcxx/include/array
index 0b0c85458999c..2522537227b88 100644
--- a/libcxx/include/array
+++ b/libcxx/include/array
@@ -594,7 +594,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/atomic b/libcxx/include/atomic
index 23a3db5d35029..ec40a0883f152 100644
--- a/libcxx/include/atomic
+++ b/libcxx/include/atomic
@@ -630,7 +630,7 @@ template <class T>
 #    error <atomic> is not implemented
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cmath>
 #    include <compare>
 #    include <cstddef>
diff --git a/libcxx/include/barrier b/libcxx/include/barrier
index 428a39a44e095..86023b5e0a8c5 100644
--- a/libcxx/include/barrier
+++ b/libcxx/include/barrier
@@ -190,7 +190,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <iterator>
diff --git a/libcxx/include/bit b/libcxx/include/bit
index fbe56bf5b689e..c483f4e003f62 100644
--- a/libcxx/include/bit
+++ b/libcxx/include/bit
@@ -90,7 +90,7 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstdlib>
 #    include <iosfwd>
 #    include <limits>
diff --git a/libcxx/include/bitset b/libcxx/include/bitset
index 37253f5722389..fd638daea8c73 100644
--- a/libcxx/include/bitset
+++ b/libcxx/include/bitset
@@ -971,7 +971,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstdlib>
 #    include <optional>
diff --git a/libcxx/include/charconv b/libcxx/include/charconv
index 4c2061b5fcb99..5d31957bf81fd 100644
--- a/libcxx/include/charconv
+++ b/libcxx/include/charconv
@@ -104,7 +104,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 _LIBCPP_END_NAMESPACE_STD
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cmath>
 #    include <concepts>
 #    include <cstddef>
diff --git a/libcxx/include/chrono b/libcxx/include/chrono
index abb678e111c73..39822d5e74f79 100644
--- a/libcxx/include/chrono
+++ b/libcxx/include/chrono
@@ -1148,13 +1148,13 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 17
 #    include <cstdint>
 #    include <stdexcept>
 #    include <string_view>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <bit>
 #    include <concepts>
 #    include <cstring>
@@ -1164,7 +1164,7 @@ namespace std {
 #    include <vector>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER == 20
 #    include <charconv>
 #    if _LIBCPP_HAS_LOCALIZATION
 #      include <locale>
diff --git a/libcxx/include/cmath b/libcxx/include/cmath
index bee743f702d01..208791ca0804c 100644
--- a/libcxx/include/cmath
+++ b/libcxx/include/cmath
@@ -612,7 +612,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <type_traits>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/codecvt b/libcxx/include/codecvt
index 33ade1d298a7e..2e77d92b7e4ff 100644
--- a/libcxx/include/codecvt
+++ b/libcxx/include/codecvt
@@ -585,7 +585,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstddef>
diff --git a/libcxx/include/compare b/libcxx/include/compare
index c229c68d6f88d..094603dd9933a 100644
--- a/libcxx/include/compare
+++ b/libcxx/include/compare
@@ -167,7 +167,7 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cmath>
 #    include <cstddef>
 #    include <type_traits>
diff --git a/libcxx/include/complex b/libcxx/include/complex
index 49ab388113542..f1ba85eb9624e 100644
--- a/libcxx/include/complex
+++ b/libcxx/include/complex
@@ -1484,7 +1484,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <iosfwd>
 #    include <stdexcept>
 #    include <type_traits>
diff --git a/libcxx/include/concepts b/libcxx/include/concepts
index 47e31d0b685e8..cee3db23c06f5 100644
--- a/libcxx/include/concepts
+++ b/libcxx/include/concepts
@@ -161,7 +161,7 @@ namespace std {
 
 #  include <version>
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <type_traits>
 #  endif
diff --git a/libcxx/include/condition_variable b/libcxx/include/condition_variable
index d42a4802b1792..4726d359e4e70 100644
--- a/libcxx/include/condition_variable
+++ b/libcxx/include/condition_variable
@@ -348,7 +348,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdint>
diff --git a/libcxx/include/coroutine b/libcxx/include/coroutine
index ff71b99e6d578..ffd12eec7819d 100644
--- a/libcxx/include/coroutine
+++ b/libcxx/include/coroutine
@@ -61,7 +61,7 @@ struct suspend_always;
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <iosfwd>
 #    include <limits>
diff --git a/libcxx/include/cwchar b/libcxx/include/cwchar
index d41af176f74fd..e2534977a7a3c 100644
--- a/libcxx/include/cwchar
+++ b/libcxx/include/cwchar
@@ -258,7 +258,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp* __constexpr_wmemchr(_Tp
 
 _LIBCPP_END_NAMESPACE_STD
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/deque b/libcxx/include/deque
index c8c6889f1a165..bf589b05aef72 100644
--- a/libcxx/include/deque
+++ b/libcxx/include/deque
@@ -2543,7 +2543,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <atomic>
 #    include <concepts>
diff --git a/libcxx/include/exception b/libcxx/include/exception
index 0b2372e571e99..4f2135e8f5d28 100644
--- a/libcxx/include/exception
+++ b/libcxx/include/exception
@@ -91,13 +91,13 @@ template <class E> void rethrow_if_nested(const E& e);
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <new>
 #    include <type_traits>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <cstdlib>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/execution b/libcxx/include/execution
index 652f38d1c126f..355d3e3c99d4e 100644
--- a/libcxx/include/execution
+++ b/libcxx/include/execution
@@ -155,7 +155,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 #  endif // _LIBCPP_HAS_EXPERIMENTAL_PSTL && _LIBCPP_STD_VER >= 17
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/experimental/iterator b/libcxx/include/experimental/iterator
index 0ed95188d7715..fd320dcc7d170 100644
--- a/libcxx/include/experimental/iterator
+++ b/libcxx/include/experimental/iterator
@@ -124,14 +124,14 @@ _LIBCPP_END_NAMESPACE_LFTS
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <iosfwd>
 #    include <optional>
 #    include <type_traits>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <locale>
 #  endif
 
diff --git a/libcxx/include/experimental/memory b/libcxx/include/experimental/memory
index ffbd8f3a065a6..b6d7b16cb6592 100644
--- a/libcxx/include/experimental/memory
+++ b/libcxx/include/experimental/memory
@@ -196,7 +196,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 #  endif // _LIBCPP_ENABLE_EXPERIMENTAL
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <limits>
 #  endif
diff --git a/libcxx/include/experimental/propagate_const b/libcxx/include/experimental/propagate_const
index 6a7f8ae9c4595..f6a99cda1a07f 100644
--- a/libcxx/include/experimental/propagate_const
+++ b/libcxx/include/experimental/propagate_const
@@ -488,7 +488,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <type_traits>
 #  endif
diff --git a/libcxx/include/experimental/simd b/libcxx/include/experimental/simd
index 2e1c781ed61a8..3c57fa4699118 100644
--- a/libcxx/include/experimental/simd
+++ b/libcxx/include/experimental/simd
@@ -88,7 +88,7 @@ inline namespace parallelism_v2 {
 #  include <experimental/__simd/traits.h>
 #  include <experimental/__simd/vec_ext.h>
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/experimental/type_traits b/libcxx/include/experimental/type_traits
index fd03546b2916f..6f0d52010e030 100644
--- a/libcxx/include/experimental/type_traits
+++ b/libcxx/include/experimental/type_traits
@@ -151,7 +151,7 @@ constexpr bool is_detected_convertible_v = is_detected_convertible<_To, _Op, _Ar
 
 _LIBCPP_END_NAMESPACE_LFTS
 
-#    if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#    if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #      include <cstddef>
 #    endif
 
diff --git a/libcxx/include/experimental/utility b/libcxx/include/experimental/utility
index fb0537fe61636..30b733a058e3f 100644
--- a/libcxx/include/experimental/utility
+++ b/libcxx/include/experimental/utility
@@ -46,7 +46,7 @@ struct erased_type {};
 
 _LIBCPP_END_NAMESPACE_LFTS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map
index 09c981131ff96..3ffb87755ded6 100644
--- a/libcxx/include/ext/hash_map
+++ b/libcxx/include/ext/hash_map
@@ -825,7 +825,7 @@ inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const hash_multimap<_Key, _Tp, _Has
 
 } // namespace __gnu_cxx
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <iterator>
 #    include <type_traits>
diff --git a/libcxx/include/ext/hash_set b/libcxx/include/ext/hash_set
index 56aa4d8a47eeb..412f2f34992e5 100644
--- a/libcxx/include/ext/hash_set
+++ b/libcxx/include/ext/hash_set
@@ -572,7 +572,7 @@ inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const hash_multiset<_Value, _Hash,
 
 } // namespace __gnu_cxx
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <iterator>
 #    include <type_traits>
diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem
index 4a30583edea3f..876e39385bf01 100644
--- a/libcxx/include/filesystem
+++ b/libcxx/include/filesystem
@@ -568,7 +568,7 @@ inline constexpr bool std::ranges::enable_view<std::filesystem::recursive_direct
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstdlib>
 #    include <cstring>
diff --git a/libcxx/include/format b/libcxx/include/format
index 7ff619fa84208..fcfb70d78c2a1 100644
--- a/libcxx/include/format
+++ b/libcxx/include/format
@@ -233,11 +233,11 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <cmath>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <array>
 #    include <cctype>
 #    include <cerrno>
diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list
index 56c45d0d46575..b8f3cafd4a994 100644
--- a/libcxx/include/forward_list
+++ b/libcxx/include/forward_list
@@ -1603,7 +1603,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <atomic>
 #    include <concepts>
diff --git a/libcxx/include/fstream b/libcxx/include/fstream
index 4000be8153731..1de6a4279f21e 100644
--- a/libcxx/include/fstream
+++ b/libcxx/include/fstream
@@ -1622,7 +1622,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdlib>
@@ -1634,7 +1634,7 @@ _LIBCPP_POP_MACROS
 #    include <type_traits>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <filesystem>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/functional b/libcxx/include/functional
index 020754a96432c..1278cac2a294a 100644
--- a/libcxx/include/functional
+++ b/libcxx/include/functional
@@ -577,18 +577,18 @@ POLICY:  For non-variadic implementations, the number of arguments is limited
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && defined(_LIBCPP_CXX03_LANG)
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && defined(_LIBCPP_CXX03_LANG)
 #    include <limits>
 #    include <new>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 14
 #    include <array>
 #    include <initializer_list>
 #    include <unordered_map>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdlib>
@@ -603,7 +603,7 @@ POLICY:  For non-variadic implementations, the number of arguments is limited
 #    include <vector>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER == 23
 #    include <__vector/vector.h>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/future b/libcxx/include/future
index 6bd836afa04e8..f27f0bd8f3c5c 100644
--- a/libcxx/include/future
+++ b/libcxx/include/future
@@ -2063,11 +2063,11 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 17
 #    include <chrono>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <cstdlib>
 #    include <exception>
diff --git a/libcxx/include/initializer_list b/libcxx/include/initializer_list
index 44cd45668388b..36e45a6db2584 100644
--- a/libcxx/include/initializer_list
+++ b/libcxx/include/initializer_list
@@ -105,7 +105,7 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* end(initia
 
 } // namespace std
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/iomanip b/libcxx/include/iomanip
index bfe9039e4b302..eec62bb4e5dd0 100644
--- a/libcxx/include/iomanip
+++ b/libcxx/include/iomanip
@@ -538,7 +538,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <array>
 #    include <bitset>
 #    include <deque>
@@ -553,7 +553,7 @@ _LIBCPP_END_NAMESPACE_STD
 #    include <vector>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <locale>
 #  endif
 
diff --git a/libcxx/include/ios b/libcxx/include/ios
index 9c03f56a230b5..80e00af1d23a1 100644
--- a/libcxx/include/ios
+++ b/libcxx/include/ios
@@ -884,7 +884,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstddef>
diff --git a/libcxx/include/istream b/libcxx/include/istream
index dfa22e9f3bfb7..1028d187d4cbd 100644
--- a/libcxx/include/istream
+++ b/libcxx/include/istream
@@ -1411,14 +1411,14 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <iosfwd>
 #    include <ostream>
 #    include <type_traits>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <locale>
 #  endif
 
diff --git a/libcxx/include/iterator b/libcxx/include/iterator
index fc8bdc5e6bcf6..f9996cb2bebf4 100644
--- a/libcxx/include/iterator
+++ b/libcxx/include/iterator
@@ -751,11 +751,11 @@ template <class E> constexpr const E* data(initializer_list<E> il) noexcept;
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 17
 #    include <variant>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <cstdlib>
 #    include <exception>
diff --git a/libcxx/include/latch b/libcxx/include/latch
index 33268d9655f25..77177e5a42923 100644
--- a/libcxx/include/latch
+++ b/libcxx/include/latch
@@ -128,7 +128,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <cstddef>
 #  endif
diff --git a/libcxx/include/limits b/libcxx/include/limits
index c26041006f082..6ba123c52aef7 100644
--- a/libcxx/include/limits
+++ b/libcxx/include/limits
@@ -528,7 +528,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <type_traits>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/list b/libcxx/include/list
index a5c84cad51489..3223f25e1cfba 100644
--- a/libcxx/include/list
+++ b/libcxx/include/list
@@ -1815,7 +1815,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <atomic>
 #    include <concepts>
diff --git a/libcxx/include/locale b/libcxx/include/locale
index b50f9c87c7281..06338102c61b0 100644
--- a/libcxx/include/locale
+++ b/libcxx/include/locale
@@ -210,7 +210,7 @@ template <class charT> class messages_byname;
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdarg>
diff --git a/libcxx/include/map b/libcxx/include/map
index b7031aeb51c7a..36733ce63558c 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -2170,7 +2170,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstdlib>
 #    include <functional>
diff --git a/libcxx/include/memory b/libcxx/include/memory
index ca880c83a544d..d5d48ed9a9e6d 100644
--- a/libcxx/include/memory
+++ b/libcxx/include/memory
@@ -987,7 +987,7 @@ template<class Pointer = void, class Smart, class... Args>
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstddef>
diff --git a/libcxx/include/memory_resource b/libcxx/include/memory_resource
index e1382912e3668..2aef1ff9e330d 100644
--- a/libcxx/include/memory_resource
+++ b/libcxx/include/memory_resource
@@ -69,11 +69,11 @@ namespace std::pmr {
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 17 && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER >= 17 && _LIBCPP_STD_VER <= 20
 #    include <mutex>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <stdexcept>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/mutex b/libcxx/include/mutex
index bec0185ede21a..126b2da23e0dd 100644
--- a/libcxx/include/mutex
+++ b/libcxx/include/mutex
@@ -501,11 +501,11 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <typeinfo>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/new b/libcxx/include/new
index ef66c67ccfbcc..f5960235695eb 100644
--- a/libcxx/include/new
+++ b/libcxx/include/new
@@ -114,7 +114,7 @@ void  operator delete[](void* ptr, void*) noexcept;                     // const
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <cstdlib>
 #    include <type_traits>
diff --git a/libcxx/include/numbers b/libcxx/include/numbers
index 6b174a26971b1..ced6d05658a51 100644
--- a/libcxx/include/numbers
+++ b/libcxx/include/numbers
@@ -159,7 +159,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 #  endif // _LIBCPP_STD_VER >= 20
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstddef>
 #    include <type_traits>
diff --git a/libcxx/include/numeric b/libcxx/include/numeric
index 64111b88d3538..7078108773ebd 100644
--- a/libcxx/include/numeric
+++ b/libcxx/include/numeric
@@ -190,12 +190,12 @@ constexpr T saturating_cast(U x) noexcept;                    // freestanding, S
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 14
 #    include <initializer_list>
 #    include <limits>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <climits>
 #    include <cmath>
 #    include <concepts>
diff --git a/libcxx/include/optional b/libcxx/include/optional
index f7e12f84beba0..d0ddd2c0b8ea2 100644
--- a/libcxx/include/optional
+++ b/libcxx/include/optional
@@ -1754,7 +1754,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <climits>
 #    include <concepts>
diff --git a/libcxx/include/ostream b/libcxx/include/ostream
index 8ec17b68503f8..3fa9a3a5437e1 100644
--- a/libcxx/include/ostream
+++ b/libcxx/include/ostream
@@ -193,7 +193,7 @@ void vprint_nonunicode(ostream& os, string_view fmt, format_args args);
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdio>
@@ -206,7 +206,7 @@ void vprint_nonunicode(ostream& os, string_view fmt, format_args args);
 #    include <type_traits>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <locale>
 #  endif
 
diff --git a/libcxx/include/queue b/libcxx/include/queue
index a1686bc7c502e..b469240cc94f9 100644
--- a/libcxx/include/queue
+++ b/libcxx/include/queue
@@ -970,7 +970,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstdlib>
 #    include <functional>
diff --git a/libcxx/include/random b/libcxx/include/random
index a2fc2bd5197e5..05decfc69c923 100644
--- a/libcxx/include/random
+++ b/libcxx/include/random
@@ -1726,7 +1726,7 @@ class piecewise_linear_distribution
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <climits>
 #    include <cmath>
diff --git a/libcxx/include/ranges b/libcxx/include/ranges
index 308224427db60..848eb3941f766 100644
--- a/libcxx/include/ranges
+++ b/libcxx/include/ranges
@@ -531,7 +531,7 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstdlib>
 #    include <iosfwd>
 #    include <type_traits>
diff --git a/libcxx/include/ratio b/libcxx/include/ratio
index bf54cd099dd41..e558c86678398 100644
--- a/libcxx/include/ratio
+++ b/libcxx/include/ratio
@@ -491,7 +491,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <type_traits>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/regex b/libcxx/include/regex
index ae6ffcbb55481..2f6f19f20cc8e 100644
--- a/libcxx/include/regex
+++ b/libcxx/include/regex
@@ -5832,7 +5832,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/scoped_allocator b/libcxx/include/scoped_allocator
index a469d4afea245..13bdc496523b3 100644
--- a/libcxx/include/scoped_allocator
+++ b/libcxx/include/scoped_allocator
@@ -564,7 +564,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <climits>
 #    include <concepts>
diff --git a/libcxx/include/semaphore b/libcxx/include/semaphore
index d411d205cdf2d..ae63cc7ad0960 100644
--- a/libcxx/include/semaphore
+++ b/libcxx/include/semaphore
@@ -180,7 +180,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <atomic>
 #    include <cstddef>
 #  endif
diff --git a/libcxx/include/set b/libcxx/include/set
index 695b6c87e3984..40b2cbfeb6c58 100644
--- a/libcxx/include/set
+++ b/libcxx/include/set
@@ -1541,7 +1541,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <cstdlib>
 #    include <functional>
diff --git a/libcxx/include/shared_mutex b/libcxx/include/shared_mutex
index 028bbf5650254..7d5948d2f9b67 100644
--- a/libcxx/include/shared_mutex
+++ b/libcxx/include/shared_mutex
@@ -439,7 +439,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <optional>
 #    include <system_error>
 #  endif
diff --git a/libcxx/include/span b/libcxx/include/span
index 230ae3fa2b198..db476f1f0a557 100644
--- a/libcxx/include/span
+++ b/libcxx/include/span
@@ -634,7 +634,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <array>
 #    include <concepts>
 #    include <functional>
diff --git a/libcxx/include/sstream b/libcxx/include/sstream
index a42e8fbc9b72e..3df34d97fdcae 100644
--- a/libcxx/include/sstream
+++ b/libcxx/include/sstream
@@ -1294,7 +1294,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if _LIBCPP_STD_VER <= 20 && !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES)
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <ostream>
 #    include <type_traits>
 #  endif
diff --git a/libcxx/include/stack b/libcxx/include/stack
index 537b82210b9d4..313c305dd8088 100644
--- a/libcxx/include/stack
+++ b/libcxx/include/stack
@@ -377,7 +377,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <concepts>
 #    include <functional>
 #    include <type_traits>
diff --git a/libcxx/include/stdexcept b/libcxx/include/stdexcept
index d01de5c46211c..348ab6cbdc992 100644
--- a/libcxx/include/stdexcept
+++ b/libcxx/include/stdexcept
@@ -280,7 +280,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 
 _LIBCPP_END_NAMESPACE_STD
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <cstdlib>
 #    include <exception>
diff --git a/libcxx/include/stop_token b/libcxx/include/stop_token
index 0572682a4286e..155b971d5edd9 100644
--- a/libcxx/include/stop_token
+++ b/libcxx/include/stop_token
@@ -52,7 +52,7 @@ namespace std {
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <iosfwd>
 #  endif
diff --git a/libcxx/include/streambuf b/libcxx/include/streambuf
index 978ecb3538532..cd987416aff64 100644
--- a/libcxx/include/streambuf
+++ b/libcxx/include/streambuf
@@ -436,7 +436,7 @@ _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstdint>
 #    include <optional>
 #  endif
diff --git a/libcxx/include/string b/libcxx/include/string
index 0c8767df2cdd2..6b97d6550957a 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -4025,7 +4025,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/string_view b/libcxx/include/string_view
index 5dd04a9ba8479..a9dcee914b8e7 100644
--- a/libcxx/include/string_view
+++ b/libcxx/include/string_view
@@ -971,7 +971,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/system_error b/libcxx/include/system_error
index 2b668e5f8f1bc..ef760453d9893 100644
--- a/libcxx/include/system_error
+++ b/libcxx/include/system_error
@@ -164,7 +164,7 @@ template <> struct hash<std::error_condition>;
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstdint>
 #    include <cstring>
 #    include <limits>
diff --git a/libcxx/include/thread b/libcxx/include/thread
index 029ed418e2070..f252273ebadcd 100644
--- a/libcxx/include/thread
+++ b/libcxx/include/thread
@@ -117,11 +117,11 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
 
 #  endif // _LIBCPP_HAS_THREADS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 17
 #    include <chrono>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstring>
 #    include <functional>
 #    include <new>
diff --git a/libcxx/include/tuple b/libcxx/include/tuple
index e02e45f425f4f..a15fbf4475995 100644
--- a/libcxx/include/tuple
+++ b/libcxx/include/tuple
@@ -1463,7 +1463,7 @@ _LIBCPP_POP_MACROS
 
 // clang-format on
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <exception>
 #    include <iosfwd>
diff --git a/libcxx/include/typeindex b/libcxx/include/typeindex
index 82ea3d616f35d..289784b372027 100644
--- a/libcxx/include/typeindex
+++ b/libcxx/include/typeindex
@@ -102,7 +102,7 @@ struct hash<type_index> : public __unary_function<type_index, size_t> {
 
 _LIBCPP_END_NAMESPACE_STD
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <iosfwd>
 #    include <new>
diff --git a/libcxx/include/typeinfo b/libcxx/include/typeinfo
index 7cc675ce59ae5..e69422ef0711f 100644
--- a/libcxx/include/typeinfo
+++ b/libcxx/include/typeinfo
@@ -389,7 +389,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 }
 _LIBCPP_END_NAMESPACE_STD
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <cstdlib>
 #    include <type_traits>
diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map
index 6afa5c39029f4..8cefba01fb5f6 100644
--- a/libcxx/include/unordered_map
+++ b/libcxx/include/unordered_map
@@ -2381,7 +2381,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <bit>
 #    include <cmath>
diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set
index 45a36f34973a5..d54d59403b038 100644
--- a/libcxx/include/unordered_set
+++ b/libcxx/include/unordered_set
@@ -1848,7 +1848,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cmath>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/utility b/libcxx/include/utility
index 24b3baac91b1d..e0c97efc6424d 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -332,14 +332,11 @@ template <class T>
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
-#    include <limits>
-#  endif
-
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <cstdlib>
 #    include <iosfwd>
+#    include <limits>
 #    include <type_traits>
 #  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
diff --git a/libcxx/include/valarray b/libcxx/include/valarray
index 58287b60dd898..7eccdf7fcbff1 100644
--- a/libcxx/include/valarray
+++ b/libcxx/include/valarray
@@ -3304,7 +3304,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <concepts>
 #    include <cstdlib>
diff --git a/libcxx/include/variant b/libcxx/include/variant
index 9b2c4ee23ddcf..f95690a3054fc 100644
--- a/libcxx/include/variant
+++ b/libcxx/include/variant
@@ -1642,7 +1642,7 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <cstddef>
 #    include <exception>
 #    include <tuple>
diff --git a/libcxx/include/vector b/libcxx/include/vector
index 7f260a096ca60..f289013a682bc 100644
--- a/libcxx/include/vector
+++ b/libcxx/include/vector
@@ -348,7 +348,7 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
 #    pragma GCC system_header
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23
 #    include <array>
 #    include <cerrno>
 #    include <clocale>
@@ -357,7 +357,7 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
 #    include <typeinfo>
 #  endif
 
-#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20
 #    include <algorithm>
 #    include <atomic>
 #    include <cctype>
diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py
index 8995482778d43..1ff80af1b5e1d 100644
--- a/libcxx/test/libcxx/transitive_includes.gen.py
+++ b/libcxx/test/libcxx/transitive_includes.gen.py
@@ -46,7 +46,7 @@
         normalized_header = re.sub("/", "_", str(header))
         print(
             f"""\
-// RUN: echo "#include <{header}>" | %{{cxx}} -xc++ - %{{flags}} %{{compile_flags}} --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.{normalized_header}.txt
+// RUN: echo "#include <{header}>" | %{{cxx}} -xc++ - %{{flags}} %{{compile_flags}} -D_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23 --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.{normalized_header}.txt
 """
         )
         all_traces.append(f"%t/trace-includes.{normalized_header}.txt")
@@ -89,7 +89,7 @@
 // UNSUPPORTED: LIBCXX-FREEBSD-FIXME
 
 // RUN: mkdir %t
-// RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} -Wno-deprecated --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
+// RUN: %{{cxx}} %s %{{flags}} %{{compile_flags}} -D_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23 -Wno-deprecated --trace-includes -fshow-skipped-includes --preprocess > /dev/null 2> %t/trace-includes.txt
 // RUN: %{{python}} %{{libcxx-dir}}/test/libcxx/transitive_includes/to_csv.py %t/trace-includes.txt > %t/actual_transitive_includes.csv
 // RUN: cat %{{libcxx-dir}}/test/libcxx/transitive_includes/%{{cxx_std}}.csv | awk '/^{escaped_header} / {{ print }}' > %t/expected_transitive_includes.csv
 // RUN: diff -w %t/expected_transitive_includes.csv %t/actual_transitive_includes.csv
diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/pr40459.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/pr40459.pass.cpp
index ee001f0605506..b0861e933af76 100644
--- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/pr40459.pass.cpp
+++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/pr40459.pass.cpp
@@ -39,11 +39,7 @@ struct Deleter {
 };
 
 int main(int, char**) {
-#if TEST_STD_VER >= 11
-  alignas(B) char buffer[sizeof(B)];
-#else
-  std::aligned_storage<sizeof(B), std::alignment_of<B>::value>::type buffer;
-#endif
+  TEST_ALIGNAS(B) char buffer[sizeof(B)];
   B* pb                 = ::new ((void*)&buffer) B();
   std::shared_ptr<B> sp = std::shared_ptr<B>(pb, Deleter());
   std::weak_ptr<B> wp   = sp;



More information about the libcxx-commits mailing list