[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 04:44:13 PDT 2026
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/195509
>From 745998160260bfb5c17cedf318c649f7202398ee 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..4128bae2a8656 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(TEST_ALIGNOF(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