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

via libcxx-commits libcxx-commits at lists.llvm.org
Sun May 3 01:23:06 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Nikolas Klauser (philnik777)

<details>
<summary>Changes</summary>

This patch removes the unused transitive includes by default. `_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23` can be defined to keep the transitive includes around for an easier transition. The macro will be removed in LLVM 24.

This patch implements https://discourse.llvm.org/t/rfc-remove-unused-transitive-includes-from-the-libc-headers/90157


---

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


82 Files Affected:

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


``````````diff
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) &...
[truncated]

``````````

</details>


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


More information about the libcxx-commits mailing list