From ce5b2e876494cb95f02d9f915081e2b8781e74d1 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser Date: Fri, 5 Jun 2026 09:45:49 +0200 Subject: [PATCH] [libc++] Drop transitive includes by default (#195509) 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 --- compiler-rt/test/tsan/many_held_mutex.cpp | 2 +- libcxx/docs/ReleaseNotes/23.rst | 6 ++++++ libcxx/include/__functional/function.h | 1 + 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 | 4 ++-- 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/module.modulemap.in | 12 ++++++++++-- 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 ++-- .../func.wrap/func.wrap.func/derive_from.pass.cpp | 1 + .../util.smartptr.weak.const/pr40459.pass.cpp | 6 +----- .../shared_ptr/TestSharedPtrFromStdModule.py | 1 + .../weak_ptr/TestWeakPtrFromStdModule.py | 1 + 89 files changed, 128 insertions(+), 117 deletions(-) diff --git a/compiler-rt/test/tsan/many_held_mutex.cpp b/compiler-rt/test/tsan/many_held_mutex.cpp index 76e072b35a23..781f9379133d 100644 --- a/compiler-rt/test/tsan/many_held_mutex.cpp +++ b/compiler-rt/test/tsan/many_held_mutex.cpp @@ -1,8 +1,8 @@ // RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -fsanitize=thread -o %t // RUN: %run %t 128 +#include #include -#include #include int main(int argc, char *argv[]) { diff --git a/libcxx/docs/ReleaseNotes/23.rst b/libcxx/docs/ReleaseNotes/23.rst index e94897ffaf43..03dabc54dcf7 100644 --- a/libcxx/docs/ReleaseNotes/23.rst +++ b/libcxx/docs/ReleaseNotes/23.rst @@ -60,6 +60,7 @@ Improvements and New Features for ``std::deque`` iterators. - ``std::copy(CharT*, CharT*, ostreambuf_iterator)`` 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 ------------------------- @@ -76,6 +77,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 on 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/__functional/function.h b/libcxx/include/__functional/function.h index 73fd43ec073f..d62b6b06722a 100644 --- a/libcxx/include/__functional/function.h +++ b/libcxx/include/__functional/function.h @@ -17,6 +17,7 @@ #include <__functional/binary_function.h> #include <__functional/unary_function.h> #include <__memory/addressof.h> +#include <__new/placement_new_delete.h> #include <__type_traits/aligned_storage.h> #include <__type_traits/decay.h> #include <__type_traits/invoke.h> diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm index 95446b44eaf9..a0c632edbcbd 100644 --- a/libcxx/include/algorithm +++ b/libcxx/include/algorithm @@ -2104,11 +2104,11 @@ template # 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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/any b/libcxx/include/any index 4addb3c2b883..6157713a4069 100644 --- a/libcxx/include/any +++ b/libcxx/include/any @@ -558,11 +558,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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include @@ -574,7 +574,7 @@ _LIBCPP_POP_MACROS # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # include # endif diff --git a/libcxx/include/array b/libcxx/include/array index 0b0c85458999..2522537227b8 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 # include # include diff --git a/libcxx/include/atomic b/libcxx/include/atomic index 23a3db5d3502..ec40a0883f15 100644 --- a/libcxx/include/atomic +++ b/libcxx/include/atomic @@ -630,7 +630,7 @@ template # error 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 # include # include diff --git a/libcxx/include/barrier b/libcxx/include/barrier index 0bd0e3da0ca1..7fda4c8e0617 100644 --- a/libcxx/include/barrier +++ b/libcxx/include/barrier @@ -192,7 +192,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 # include # include diff --git a/libcxx/include/bit b/libcxx/include/bit index fbe56bf5b689..c483f4e003f6 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 # include # include diff --git a/libcxx/include/bitset b/libcxx/include/bitset index 37253f572238..fd638daea8c7 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 # include # include diff --git a/libcxx/include/charconv b/libcxx/include/charconv index 4c2061b5fcb9..5d31957bf81f 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 # include # include diff --git a/libcxx/include/chrono b/libcxx/include/chrono index abb678e111c7..39822d5e74f7 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 # include # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include @@ -1164,7 +1164,7 @@ namespace std { # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER == 20 # include # if _LIBCPP_HAS_LOCALIZATION # include diff --git a/libcxx/include/cmath b/libcxx/include/cmath index bee743f702d0..208791ca0804 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 # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/codecvt b/libcxx/include/codecvt index 00f3301a60f5..ea7c0f876f61 100644 --- a/libcxx/include/codecvt +++ b/libcxx/include/codecvt @@ -587,7 +587,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 # include # include diff --git a/libcxx/include/compare b/libcxx/include/compare index c229c68d6f88..094603dd9933 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 # include # include diff --git a/libcxx/include/complex b/libcxx/include/complex index 49ab38811354..f1ba85eb9624 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 # include # include diff --git a/libcxx/include/concepts b/libcxx/include/concepts index 47e31d0b685e..cee3db23c06f 100644 --- a/libcxx/include/concepts +++ b/libcxx/include/concepts @@ -161,7 +161,7 @@ namespace std { # include -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # endif diff --git a/libcxx/include/condition_variable b/libcxx/include/condition_variable index a5dc060fbfa3..a6b5f842f3bc 100644 --- a/libcxx/include/condition_variable +++ b/libcxx/include/condition_variable @@ -350,7 +350,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 # include # include diff --git a/libcxx/include/coroutine b/libcxx/include/coroutine index ff71b99e6d57..ffd12eec7819 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 # include # include diff --git a/libcxx/include/cwchar b/libcxx/include/cwchar index d41af176f74f..e2534977a7a3 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 # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/deque b/libcxx/include/deque index c8c6889f1a16..bf589b05aef7 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 # include # include diff --git a/libcxx/include/exception b/libcxx/include/exception index 0b2372e571e9..4f2135e8f5d2 100644 --- a/libcxx/include/exception +++ b/libcxx/include/exception @@ -91,13 +91,13 @@ template 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 # include # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/execution b/libcxx/include/execution index 652f38d1c126..355d3e3c99d4 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 # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/experimental/iterator b/libcxx/include/experimental/iterator index 0ed95188d771..fd320dcc7d17 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 # include # include # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # endif diff --git a/libcxx/include/experimental/memory b/libcxx/include/experimental/memory index ffbd8f3a065a..b6d7b16cb659 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 # include # endif diff --git a/libcxx/include/experimental/propagate_const b/libcxx/include/experimental/propagate_const index 6a7f8ae9c459..f6a99cda1a07 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 # include # endif diff --git a/libcxx/include/experimental/simd b/libcxx/include/experimental/simd index 2e1c781ed61a..3c57fa469911 100644 --- a/libcxx/include/experimental/simd +++ b/libcxx/include/experimental/simd @@ -88,7 +88,7 @@ inline namespace parallelism_v2 { # include # include -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # 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 fd03546b2916..6f0d52010e03 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 # endif diff --git a/libcxx/include/experimental/utility b/libcxx/include/experimental/utility index fb0537fe6163..30b733a058e3 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 # 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 09c981131ff9..3ffb87755ded 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 # include # include diff --git a/libcxx/include/ext/hash_set b/libcxx/include/ext/hash_set index 56aa4d8a47ee..412f2f34992e 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 # include # include diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem index 4a30583edea3..876e39385bf0 100644 --- a/libcxx/include/filesystem +++ b/libcxx/include/filesystem @@ -568,7 +568,7 @@ inline constexpr bool std::ranges::enable_view # include # include diff --git a/libcxx/include/format b/libcxx/include/format index 7ff619fa8420..fcfb70d78c2a 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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index 35afb7301f48..6d86f7a8e597 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 # include # include diff --git a/libcxx/include/fstream b/libcxx/include/fstream index 7edecbb935a0..b5fb65820628 100644 --- a/libcxx/include/fstream +++ b/libcxx/include/fstream @@ -1624,7 +1624,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 # include # include @@ -1636,7 +1636,7 @@ _LIBCPP_POP_MACROS # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/functional b/libcxx/include/functional index 9cd595add84f..9d588231d548 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 # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 14 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 14 # include # include # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include @@ -603,7 +603,7 @@ POLICY: For non-variadic implementations, the number of arguments is limited # include # 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 9c71dfb89087..c169c6c182d8 100644 --- a/libcxx/include/future +++ b/libcxx/include/future @@ -2065,11 +2065,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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/initializer_list b/libcxx/include/initializer_list index 44cd45668388..36e45a6db258 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 # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/iomanip b/libcxx/include/iomanip index bfe9039e4b30..eec62bb4e5dd 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 # include # include @@ -553,7 +553,7 @@ _LIBCPP_END_NAMESPACE_STD # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # endif diff --git a/libcxx/include/ios b/libcxx/include/ios index 945fd68643a7..0c14a2a09855 100644 --- a/libcxx/include/ios +++ b/libcxx/include/ios @@ -875,12 +875,12 @@ _LIBCPP_POP_MACROS # endif // _LIBCPP_HAS_LOCALIZATION -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/istream b/libcxx/include/istream index c4b2de9caf01..640cd9f4e29f 100644 --- a/libcxx/include/istream +++ b/libcxx/include/istream @@ -1413,14 +1413,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 # include # include # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # endif diff --git a/libcxx/include/iterator b/libcxx/include/iterator index fc8bdc5e6bcf..f9996cb2bebf 100644 --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -751,11 +751,11 @@ template constexpr const E* data(initializer_list 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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/latch b/libcxx/include/latch index 33268d9655f2..77177e5a4292 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 # include # endif diff --git a/libcxx/include/limits b/libcxx/include/limits index c26041006f08..6ba123c52aef 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 # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/list b/libcxx/include/list index a5c84cad5148..3223f25e1cfb 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 # include # include diff --git a/libcxx/include/locale b/libcxx/include/locale index b50f9c87c728..06338102c61b 100644 --- a/libcxx/include/locale +++ b/libcxx/include/locale @@ -210,7 +210,7 @@ template 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 # include # include diff --git a/libcxx/include/map b/libcxx/include/map index 8dd461bfb2be..c983a3ed07cd 100644 --- a/libcxx/include/map +++ b/libcxx/include/map @@ -2275,7 +2275,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 # include # include diff --git a/libcxx/include/memory b/libcxx/include/memory index ca880c83a544..d5d48ed9a9e6 100644 --- a/libcxx/include/memory +++ b/libcxx/include/memory @@ -987,7 +987,7 @@ template # 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 # include # include diff --git a/libcxx/include/memory_resource b/libcxx/include/memory_resource index e1382912e366..2aef1ff9e330 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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in index 2ccb455b7408..29f3818c3967 100644 --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -837,7 +837,11 @@ module std [system] { header "__algorithm/stable_sort.h" export std.memory.unique_temporary_buffer // TODO: Workaround for https://llvm.org/PR120108 } - module swap_ranges { header "__algorithm/swap_ranges.h" } + module swap_ranges { + header "__algorithm/swap_ranges.h" + export std.algorithm.iterator_operations + export std.algorithm.iter_swap + } module three_way_comp_ref_type { header "__algorithm/three_way_comp_ref_type.h" } module transform { header "__algorithm/transform.h" } module uniform_random_bit_generator_adaptor { header "__algorithm/uniform_random_bit_generator_adaptor.h" } @@ -1696,6 +1700,7 @@ module std [system] { } module uninitialized_algorithms { header "__memory/uninitialized_algorithms.h" + export std.memory.destroy export std.utility.pair } module unique_ptr { @@ -1834,7 +1839,10 @@ module std [system] { module clamp_to_integral { header "__random/clamp_to_integral.h" } module default_random_engine { header "__random/default_random_engine.h" } module discard_block_engine { header "__random/discard_block_engine.h" } - module discrete_distribution { header "__random/discrete_distribution.h" } + module discrete_distribution { + header "__random/discrete_distribution.h" + export std.vector.vector + } module exponential_distribution { header "__random/exponential_distribution.h" } module extreme_value_distribution { header "__random/extreme_value_distribution.h" } module fisher_f_distribution { header "__random/fisher_f_distribution.h" } diff --git a/libcxx/include/mutex b/libcxx/include/mutex index a3f358afe2ac..ab505f945d63 100644 --- a/libcxx/include/mutex +++ b/libcxx/include/mutex @@ -503,11 +503,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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/new b/libcxx/include/new index ef66c67ccfbc..f5960235695e 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 # include # include diff --git a/libcxx/include/numbers b/libcxx/include/numbers index 6b174a26971b..ced6d05658a5 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 # include # include diff --git a/libcxx/include/numeric b/libcxx/include/numeric index 64111b88d353..7078108773eb 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 # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/optional b/libcxx/include/optional index f7e12f84beba..d0ddd2c0b8ea 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 # include # include diff --git a/libcxx/include/ostream b/libcxx/include/ostream index 8ec17b68503f..3fa9a3a5437e 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 # include # include @@ -206,7 +206,7 @@ void vprint_nonunicode(ostream& os, string_view fmt, format_args args); # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 23 # include # endif diff --git a/libcxx/include/queue b/libcxx/include/queue index a1686bc7c502..b469240cc94f 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 # include # include diff --git a/libcxx/include/random b/libcxx/include/random index a2fc2bd5197e..05decfc69c92 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 # include # include diff --git a/libcxx/include/ranges b/libcxx/include/ranges index de05c31744fc..d82a41942327 100644 --- a/libcxx/include/ranges +++ b/libcxx/include/ranges @@ -545,7 +545,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 # include # include diff --git a/libcxx/include/ratio b/libcxx/include/ratio index bf54cd099dd4..e558c8667839 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 # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/regex b/libcxx/include/regex index 695a0f21754c..c72ea585702c 100644 --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -5834,7 +5834,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 # include # include diff --git a/libcxx/include/scoped_allocator b/libcxx/include/scoped_allocator index a469d4afea24..13bdc496523b 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 # include # include diff --git a/libcxx/include/semaphore b/libcxx/include/semaphore index d411d205cdf2..ae63cc7ad096 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 # include # endif diff --git a/libcxx/include/set b/libcxx/include/set index e157419ce9f0..3f2d2cd164d2 100644 --- a/libcxx/include/set +++ b/libcxx/include/set @@ -1569,7 +1569,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 # include # include diff --git a/libcxx/include/shared_mutex b/libcxx/include/shared_mutex index 2d0ed11309bd..9479f0aa616f 100644 --- a/libcxx/include/shared_mutex +++ b/libcxx/include/shared_mutex @@ -449,7 +449,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 # include # endif diff --git a/libcxx/include/span b/libcxx/include/span index 1a484478e19d..49954df9515d 100644 --- a/libcxx/include/span +++ b/libcxx/include/span @@ -636,7 +636,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 # include # include diff --git a/libcxx/include/sstream b/libcxx/include/sstream index e40e65dbde2b..d13ba265b467 100644 --- a/libcxx/include/sstream +++ b/libcxx/include/sstream @@ -1296,7 +1296,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 # include # endif diff --git a/libcxx/include/stack b/libcxx/include/stack index 537b82210b9d..313c305dd808 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 # include # include diff --git a/libcxx/include/stdexcept b/libcxx/include/stdexcept index 3c9c03c0ca27..fa011922f611 100644 --- a/libcxx/include/stdexcept +++ b/libcxx/include/stdexcept @@ -282,7 +282,7 @@ _LIBCPP_END_EXPLICIT_ABI_ANNOTATIONS _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 # include # include diff --git a/libcxx/include/stop_token b/libcxx/include/stop_token index 0572682a4286..155b971d5edd 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 # include # endif diff --git a/libcxx/include/streambuf b/libcxx/include/streambuf index bffdeacfa045..e0db304771a1 100644 --- a/libcxx/include/streambuf +++ b/libcxx/include/streambuf @@ -438,7 +438,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 # include # endif diff --git a/libcxx/include/string b/libcxx/include/string index fab6b08ffce6..a201d2ca4435 100644 --- a/libcxx/include/string +++ b/libcxx/include/string @@ -3962,7 +3962,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 # include # include diff --git a/libcxx/include/string_view b/libcxx/include/string_view index 5dd04a9ba847..a9dcee914b8e 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 # include # include diff --git a/libcxx/include/system_error b/libcxx/include/system_error index 2b668e5f8f1b..ef760453d989 100644 --- a/libcxx/include/system_error +++ b/libcxx/include/system_error @@ -164,7 +164,7 @@ template <> struct hash; # 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 # include # include diff --git a/libcxx/include/thread b/libcxx/include/thread index 029ed418e207..f252273ebadc 100644 --- a/libcxx/include/thread +++ b/libcxx/include/thread @@ -117,11 +117,11 @@ void sleep_for(const chrono::duration& 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 # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/include/tuple b/libcxx/include/tuple index 3e8e7c902ef2..d6d9e765934c 100644 --- a/libcxx/include/tuple +++ b/libcxx/include/tuple @@ -1458,7 +1458,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 # include # include diff --git a/libcxx/include/typeindex b/libcxx/include/typeindex index 82ea3d616f35..289784b37202 100644 --- a/libcxx/include/typeindex +++ b/libcxx/include/typeindex @@ -102,7 +102,7 @@ struct hash : public __unary_function { _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 # include # include diff --git a/libcxx/include/typeinfo b/libcxx/include/typeinfo index 7cc675ce59ae..e69422ef0711 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 # include # include diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map index 6afa5c39029f..8cefba01fb5f 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 # include # include diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set index 45a36f34973a..d54d59403b03 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 # include # include diff --git a/libcxx/include/utility b/libcxx/include/utility index 24b3baac91b1..e0c97efc6424 100644 --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -332,14 +332,11 @@ template # pragma GCC system_header # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include -# endif - -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include +# include # include # endif #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) diff --git a/libcxx/include/valarray b/libcxx/include/valarray index c77656f2d100..37ab9864ac45 100644 --- a/libcxx/include/valarray +++ b/libcxx/include/valarray @@ -3306,7 +3306,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 # include # include diff --git a/libcxx/include/variant b/libcxx/include/variant index 45462ee8a771..5b3642ff8036 100644 --- a/libcxx/include/variant +++ b/libcxx/include/variant @@ -1644,7 +1644,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 # include # include diff --git a/libcxx/include/vector b/libcxx/include/vector index 7f260a096ca6..f289013a682b 100644 --- a/libcxx/include/vector +++ b/libcxx/include/vector @@ -348,7 +348,7 @@ template requires is-vector-bool-reference // 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 # include # include @@ -357,7 +357,7 @@ template requires is-vector-bool-reference // Since C++ # include # endif -# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# if defined(_LIBCPP_KEEP_TRANSITIVE_INCLUDES_LLVM23) && _LIBCPP_STD_VER <= 20 # include # include # include diff --git a/libcxx/test/libcxx/transitive_includes.gen.py b/libcxx/test/libcxx/transitive_includes.gen.py index 8995482778d4..1ff80af1b5e1 100644 --- a/libcxx/test/libcxx/transitive_includes.gen.py +++ b/libcxx/test/libcxx/transitive_includes.gen.py @@ -46,7 +46,7 @@ if regenerate_expected_results: 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 @@ else: // 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/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp index a9e037342b07..976adbfc53af 100644 --- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp +++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp @@ -13,6 +13,7 @@ // See https://llvm.org/PR20002 #include +#include #include #include "test_macros.h" 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 ee001f060550..4128bae2a865 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::value>::type buffer; -#endif + TEST_ALIGNAS(TEST_ALIGNOF(B)) char buffer[sizeof(B)]; B* pb = ::new ((void*)&buffer) B(); std::shared_ptr sp = std::shared_ptr(pb, Deleter()); std::weak_ptr wp = sp; diff --git a/lldb/test/API/commands/expression/import-std-module/shared_ptr/TestSharedPtrFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/shared_ptr/TestSharedPtrFromStdModule.py index da86466018bb..2096c184ab06 100644 --- a/lldb/test/API/commands/expression/import-std-module/shared_ptr/TestSharedPtrFromStdModule.py +++ b/lldb/test/API/commands/expression/import-std-module/shared_ptr/TestSharedPtrFromStdModule.py @@ -12,6 +12,7 @@ class TestSharedPtr(TestBase): @skipIf(compiler=no_match("clang")) @skipIf(macos_version=["<", "15.0"]) @skipIf(compiler="clang", compiler_version=["<", "17.0"]) + @skipIf(bugnumber="https://llvm.org/PR200154") def test(self): self.build() diff --git a/lldb/test/API/commands/expression/import-std-module/weak_ptr/TestWeakPtrFromStdModule.py b/lldb/test/API/commands/expression/import-std-module/weak_ptr/TestWeakPtrFromStdModule.py index f0a0a46a73e9..e3d3cf1622f0 100644 --- a/lldb/test/API/commands/expression/import-std-module/weak_ptr/TestWeakPtrFromStdModule.py +++ b/lldb/test/API/commands/expression/import-std-module/weak_ptr/TestWeakPtrFromStdModule.py @@ -12,6 +12,7 @@ class TestSharedPtr(TestBase): @skipIf(compiler=no_match("clang")) @skipIf(compiler="clang", compiler_version=["<", "17.0"]) @skipIf(macos_version=["<", "15.0"]) + @skipIf(bugnumber="https://llvm.org/PR200154") def test(self): self.build()