[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