[libcxx-commits] [libcxx] [libc++][RFC] Only include what is required by-version in the umbrella headers (PR #83740)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Apr 13 09:53:29 PDT 2024
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/83740
>From a0cec7fd2adba60bb94ac5ce7fef1e15a3261167 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Fri, 2 Feb 2024 11:33:47 +0100
Subject: [PATCH] [libc++] Only include what is required by-version in the
umbrella headers
---
libcxx/include/algorithm | 255 +++++++++---------
libcxx/include/bit | 32 ++-
libcxx/include/charconv | 25 +-
libcxx/include/chrono | 68 ++---
libcxx/include/compare | 30 ++-
libcxx/include/concepts | 48 ++--
libcxx/include/coroutine | 4 +
libcxx/include/module.modulemap | 5 +-
libcxx/include/streambuf | 1 +
.../libcxx/algorithms/half_positive.pass.cpp | 4 +-
.../test/libcxx/time/convert_to_tm.pass.cpp | 1 +
.../test/libcxx/transitive_includes/cxx03.csv | 1 -
.../test/libcxx/transitive_includes/cxx11.csv | 1 -
13 files changed, 254 insertions(+), 221 deletions(-)
diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm
index 0f62de7fa83f98..3614c65c88d093 100644
--- a/libcxx/include/algorithm
+++ b/libcxx/include/algorithm
@@ -1794,15 +1794,11 @@ template <class BidirectionalIterator, class Compare>
*/
#include <__config>
-#include <version>
#include <__algorithm/adjacent_find.h>
#include <__algorithm/all_of.h>
#include <__algorithm/any_of.h>
#include <__algorithm/binary_search.h>
-#include <__algorithm/clamp.h>
-#include <__algorithm/comp.h>
-#include <__algorithm/comp_ref_type.h>
#include <__algorithm/copy.h>
#include <__algorithm/copy_backward.h>
#include <__algorithm/copy_if.h>
@@ -1818,18 +1814,9 @@ template <class BidirectionalIterator, class Compare>
#include <__algorithm/find_first_of.h>
#include <__algorithm/find_if.h>
#include <__algorithm/find_if_not.h>
-#include <__algorithm/fold.h>
#include <__algorithm/for_each.h>
-#include <__algorithm/for_each_n.h>
#include <__algorithm/generate.h>
#include <__algorithm/generate_n.h>
-#include <__algorithm/half_positive.h>
-#include <__algorithm/in_found_result.h>
-#include <__algorithm/in_fun_result.h>
-#include <__algorithm/in_in_out_result.h>
-#include <__algorithm/in_in_result.h>
-#include <__algorithm/in_out_out_result.h>
-#include <__algorithm/in_out_result.h>
#include <__algorithm/includes.h>
#include <__algorithm/inplace_merge.h>
#include <__algorithm/is_heap.h>
@@ -1840,7 +1827,6 @@ template <class BidirectionalIterator, class Compare>
#include <__algorithm/is_sorted_until.h>
#include <__algorithm/iter_swap.h>
#include <__algorithm/lexicographical_compare.h>
-#include <__algorithm/lexicographical_compare_three_way.h>
#include <__algorithm/lower_bound.h>
#include <__algorithm/make_heap.h>
#include <__algorithm/max.h>
@@ -1848,7 +1834,6 @@ template <class BidirectionalIterator, class Compare>
#include <__algorithm/merge.h>
#include <__algorithm/min.h>
#include <__algorithm/min_element.h>
-#include <__algorithm/min_max_result.h>
#include <__algorithm/minmax.h>
#include <__algorithm/minmax_element.h>
#include <__algorithm/mismatch.h>
@@ -1864,112 +1849,7 @@ template <class BidirectionalIterator, class Compare>
#include <__algorithm/partition_point.h>
#include <__algorithm/pop_heap.h>
#include <__algorithm/prev_permutation.h>
-#include <__algorithm/pstl_any_all_none_of.h>
-#include <__algorithm/pstl_copy.h>
-#include <__algorithm/pstl_count.h>
-#include <__algorithm/pstl_equal.h>
-#include <__algorithm/pstl_fill.h>
-#include <__algorithm/pstl_find.h>
-#include <__algorithm/pstl_for_each.h>
-#include <__algorithm/pstl_generate.h>
-#include <__algorithm/pstl_is_partitioned.h>
-#include <__algorithm/pstl_merge.h>
-#include <__algorithm/pstl_move.h>
-#include <__algorithm/pstl_replace.h>
-#include <__algorithm/pstl_rotate_copy.h>
-#include <__algorithm/pstl_sort.h>
-#include <__algorithm/pstl_stable_sort.h>
-#include <__algorithm/pstl_transform.h>
#include <__algorithm/push_heap.h>
-#include <__algorithm/ranges_adjacent_find.h>
-#include <__algorithm/ranges_all_of.h>
-#include <__algorithm/ranges_any_of.h>
-#include <__algorithm/ranges_binary_search.h>
-#include <__algorithm/ranges_clamp.h>
-#include <__algorithm/ranges_contains.h>
-#include <__algorithm/ranges_contains_subrange.h>
-#include <__algorithm/ranges_copy.h>
-#include <__algorithm/ranges_copy_backward.h>
-#include <__algorithm/ranges_copy_if.h>
-#include <__algorithm/ranges_copy_n.h>
-#include <__algorithm/ranges_count.h>
-#include <__algorithm/ranges_count_if.h>
-#include <__algorithm/ranges_ends_with.h>
-#include <__algorithm/ranges_equal.h>
-#include <__algorithm/ranges_equal_range.h>
-#include <__algorithm/ranges_fill.h>
-#include <__algorithm/ranges_fill_n.h>
-#include <__algorithm/ranges_find.h>
-#include <__algorithm/ranges_find_end.h>
-#include <__algorithm/ranges_find_first_of.h>
-#include <__algorithm/ranges_find_if.h>
-#include <__algorithm/ranges_find_if_not.h>
-#include <__algorithm/ranges_for_each.h>
-#include <__algorithm/ranges_for_each_n.h>
-#include <__algorithm/ranges_generate.h>
-#include <__algorithm/ranges_generate_n.h>
-#include <__algorithm/ranges_includes.h>
-#include <__algorithm/ranges_inplace_merge.h>
-#include <__algorithm/ranges_is_heap.h>
-#include <__algorithm/ranges_is_heap_until.h>
-#include <__algorithm/ranges_is_partitioned.h>
-#include <__algorithm/ranges_is_permutation.h>
-#include <__algorithm/ranges_is_sorted.h>
-#include <__algorithm/ranges_is_sorted_until.h>
-#include <__algorithm/ranges_lexicographical_compare.h>
-#include <__algorithm/ranges_lower_bound.h>
-#include <__algorithm/ranges_make_heap.h>
-#include <__algorithm/ranges_max.h>
-#include <__algorithm/ranges_max_element.h>
-#include <__algorithm/ranges_merge.h>
-#include <__algorithm/ranges_min.h>
-#include <__algorithm/ranges_min_element.h>
-#include <__algorithm/ranges_minmax.h>
-#include <__algorithm/ranges_minmax_element.h>
-#include <__algorithm/ranges_mismatch.h>
-#include <__algorithm/ranges_move.h>
-#include <__algorithm/ranges_move_backward.h>
-#include <__algorithm/ranges_next_permutation.h>
-#include <__algorithm/ranges_none_of.h>
-#include <__algorithm/ranges_nth_element.h>
-#include <__algorithm/ranges_partial_sort.h>
-#include <__algorithm/ranges_partial_sort_copy.h>
-#include <__algorithm/ranges_partition.h>
-#include <__algorithm/ranges_partition_copy.h>
-#include <__algorithm/ranges_partition_point.h>
-#include <__algorithm/ranges_pop_heap.h>
-#include <__algorithm/ranges_prev_permutation.h>
-#include <__algorithm/ranges_push_heap.h>
-#include <__algorithm/ranges_remove.h>
-#include <__algorithm/ranges_remove_copy.h>
-#include <__algorithm/ranges_remove_copy_if.h>
-#include <__algorithm/ranges_remove_if.h>
-#include <__algorithm/ranges_replace.h>
-#include <__algorithm/ranges_replace_copy.h>
-#include <__algorithm/ranges_replace_copy_if.h>
-#include <__algorithm/ranges_replace_if.h>
-#include <__algorithm/ranges_reverse.h>
-#include <__algorithm/ranges_reverse_copy.h>
-#include <__algorithm/ranges_rotate.h>
-#include <__algorithm/ranges_rotate_copy.h>
-#include <__algorithm/ranges_sample.h>
-#include <__algorithm/ranges_search.h>
-#include <__algorithm/ranges_search_n.h>
-#include <__algorithm/ranges_set_difference.h>
-#include <__algorithm/ranges_set_intersection.h>
-#include <__algorithm/ranges_set_symmetric_difference.h>
-#include <__algorithm/ranges_set_union.h>
-#include <__algorithm/ranges_shuffle.h>
-#include <__algorithm/ranges_sort.h>
-#include <__algorithm/ranges_sort_heap.h>
-#include <__algorithm/ranges_stable_partition.h>
-#include <__algorithm/ranges_stable_sort.h>
-#include <__algorithm/ranges_starts_with.h>
-#include <__algorithm/ranges_swap_ranges.h>
-#include <__algorithm/ranges_transform.h>
-#include <__algorithm/ranges_unique.h>
-#include <__algorithm/ranges_unique_copy.h>
-#include <__algorithm/ranges_upper_bound.h>
#include <__algorithm/remove.h>
#include <__algorithm/remove_copy.h>
#include <__algorithm/remove_copy_if.h>
@@ -1982,17 +1862,13 @@ template <class BidirectionalIterator, class Compare>
#include <__algorithm/reverse_copy.h>
#include <__algorithm/rotate.h>
#include <__algorithm/rotate_copy.h>
-#include <__algorithm/sample.h>
#include <__algorithm/search.h>
#include <__algorithm/search_n.h>
#include <__algorithm/set_difference.h>
#include <__algorithm/set_intersection.h>
#include <__algorithm/set_symmetric_difference.h>
#include <__algorithm/set_union.h>
-#include <__algorithm/shift_left.h>
-#include <__algorithm/shift_right.h>
#include <__algorithm/shuffle.h>
-#include <__algorithm/sift_down.h>
#include <__algorithm/sort.h>
#include <__algorithm/sort_heap.h>
#include <__algorithm/stable_partition.h>
@@ -2001,9 +1877,138 @@ template <class BidirectionalIterator, class Compare>
#include <__algorithm/transform.h>
#include <__algorithm/unique.h>
#include <__algorithm/unique_copy.h>
-#include <__algorithm/unwrap_iter.h>
#include <__algorithm/upper_bound.h>
+#if _LIBCPP_STD_VER >= 17
+# include <__algorithm/clamp.h>
+# include <__algorithm/for_each_n.h>
+# include <__algorithm/pstl_any_all_none_of.h>
+# include <__algorithm/pstl_copy.h>
+# include <__algorithm/pstl_count.h>
+# include <__algorithm/pstl_equal.h>
+# include <__algorithm/pstl_fill.h>
+# include <__algorithm/pstl_find.h>
+# include <__algorithm/pstl_for_each.h>
+# include <__algorithm/pstl_generate.h>
+# include <__algorithm/pstl_is_partitioned.h>
+# include <__algorithm/pstl_merge.h>
+# include <__algorithm/pstl_move.h>
+# include <__algorithm/pstl_replace.h>
+# include <__algorithm/pstl_rotate_copy.h>
+# include <__algorithm/pstl_sort.h>
+# include <__algorithm/pstl_stable_sort.h>
+# include <__algorithm/pstl_transform.h>
+# include <__algorithm/sample.h>
+#endif // _LIBCPP_STD_VER >= 17
+
+#if _LIBCPP_STD_VER >= 20
+# include <__algorithm/in_found_result.h>
+# include <__algorithm/in_fun_result.h>
+# include <__algorithm/in_in_out_result.h>
+# include <__algorithm/in_in_result.h>
+# include <__algorithm/in_out_out_result.h>
+# include <__algorithm/in_out_result.h>
+# include <__algorithm/lexicographical_compare_three_way.h>
+# include <__algorithm/min_max_result.h>
+# include <__algorithm/ranges_adjacent_find.h>
+# include <__algorithm/ranges_all_of.h>
+# include <__algorithm/ranges_any_of.h>
+# include <__algorithm/ranges_binary_search.h>
+# include <__algorithm/ranges_clamp.h>
+# include <__algorithm/ranges_contains.h>
+# include <__algorithm/ranges_copy.h>
+# include <__algorithm/ranges_copy_backward.h>
+# include <__algorithm/ranges_copy_if.h>
+# include <__algorithm/ranges_copy_n.h>
+# include <__algorithm/ranges_count.h>
+# include <__algorithm/ranges_count_if.h>
+# include <__algorithm/ranges_equal.h>
+# include <__algorithm/ranges_equal_range.h>
+# include <__algorithm/ranges_fill.h>
+# include <__algorithm/ranges_fill_n.h>
+# include <__algorithm/ranges_find.h>
+# include <__algorithm/ranges_find_end.h>
+# include <__algorithm/ranges_find_first_of.h>
+# include <__algorithm/ranges_find_if.h>
+# include <__algorithm/ranges_find_if_not.h>
+# include <__algorithm/ranges_for_each.h>
+# include <__algorithm/ranges_for_each_n.h>
+# include <__algorithm/ranges_generate.h>
+# include <__algorithm/ranges_generate_n.h>
+# include <__algorithm/ranges_includes.h>
+# include <__algorithm/ranges_inplace_merge.h>
+# include <__algorithm/ranges_is_heap.h>
+# include <__algorithm/ranges_is_heap_until.h>
+# include <__algorithm/ranges_is_partitioned.h>
+# include <__algorithm/ranges_is_permutation.h>
+# include <__algorithm/ranges_is_sorted.h>
+# include <__algorithm/ranges_is_sorted_until.h>
+# include <__algorithm/ranges_lexicographical_compare.h>
+# include <__algorithm/ranges_lower_bound.h>
+# include <__algorithm/ranges_make_heap.h>
+# include <__algorithm/ranges_max.h>
+# include <__algorithm/ranges_max_element.h>
+# include <__algorithm/ranges_merge.h>
+# include <__algorithm/ranges_min.h>
+# include <__algorithm/ranges_min_element.h>
+# include <__algorithm/ranges_minmax.h>
+# include <__algorithm/ranges_minmax_element.h>
+# include <__algorithm/ranges_mismatch.h>
+# include <__algorithm/ranges_move.h>
+# include <__algorithm/ranges_move_backward.h>
+# include <__algorithm/ranges_next_permutation.h>
+# include <__algorithm/ranges_none_of.h>
+# include <__algorithm/ranges_nth_element.h>
+# include <__algorithm/ranges_partial_sort.h>
+# include <__algorithm/ranges_partial_sort_copy.h>
+# include <__algorithm/ranges_partition.h>
+# include <__algorithm/ranges_partition_copy.h>
+# include <__algorithm/ranges_partition_point.h>
+# include <__algorithm/ranges_pop_heap.h>
+# include <__algorithm/ranges_prev_permutation.h>
+# include <__algorithm/ranges_push_heap.h>
+# include <__algorithm/ranges_remove.h>
+# include <__algorithm/ranges_remove_copy.h>
+# include <__algorithm/ranges_remove_copy_if.h>
+# include <__algorithm/ranges_remove_if.h>
+# include <__algorithm/ranges_replace.h>
+# include <__algorithm/ranges_replace_copy.h>
+# include <__algorithm/ranges_replace_copy_if.h>
+# include <__algorithm/ranges_replace_if.h>
+# include <__algorithm/ranges_reverse.h>
+# include <__algorithm/ranges_reverse_copy.h>
+# include <__algorithm/ranges_rotate.h>
+# include <__algorithm/ranges_rotate_copy.h>
+# include <__algorithm/ranges_sample.h>
+# include <__algorithm/ranges_search.h>
+# include <__algorithm/ranges_search_n.h>
+# include <__algorithm/ranges_set_difference.h>
+# include <__algorithm/ranges_set_intersection.h>
+# include <__algorithm/ranges_set_symmetric_difference.h>
+# include <__algorithm/ranges_set_union.h>
+# include <__algorithm/ranges_shuffle.h>
+# include <__algorithm/ranges_sort.h>
+# include <__algorithm/ranges_sort_heap.h>
+# include <__algorithm/ranges_stable_partition.h>
+# include <__algorithm/ranges_stable_sort.h>
+# include <__algorithm/ranges_swap_ranges.h>
+# include <__algorithm/ranges_transform.h>
+# include <__algorithm/ranges_unique.h>
+# include <__algorithm/ranges_unique_copy.h>
+# include <__algorithm/ranges_upper_bound.h>
+# include <__algorithm/shift_left.h>
+# include <__algorithm/shift_right.h>
+#endif
+
+#if _LIBCPP_STD_VER >= 23
+# include <__algorithm/fold.h>
+# include <__algorithm/ranges_contains_subrange.h>
+# include <__algorithm/ranges_ends_with.h>
+# include <__algorithm/ranges_starts_with.h>
+#endif // _LIBCPP_STD_VER >= 23
+
+#include <version>
+
// standard-mandated includes
// [algorithm.syn]
diff --git a/libcxx/include/bit b/libcxx/include/bit
index b8e4bdc2dfe202..092aebca26a31d 100644
--- a/libcxx/include/bit
+++ b/libcxx/include/bit
@@ -61,20 +61,26 @@ namespace std {
*/
-#include <__bit/bit_cast.h>
-#include <__bit/bit_ceil.h>
-#include <__bit/bit_floor.h>
-#include <__bit/bit_log2.h>
-#include <__bit/bit_width.h>
-#include <__bit/blsr.h>
-#include <__bit/byteswap.h>
-#include <__bit/countl.h>
-#include <__bit/countr.h>
-#include <__bit/endian.h>
-#include <__bit/has_single_bit.h>
-#include <__bit/popcount.h>
-#include <__bit/rotate.h>
#include <__config>
+
+#if _LIBCPP_STD_VER >= 20
+# include <__bit/bit_cast.h>
+# include <__bit/bit_ceil.h>
+# include <__bit/bit_floor.h>
+# include <__bit/bit_log2.h>
+# include <__bit/bit_width.h>
+# include <__bit/countl.h>
+# include <__bit/countr.h>
+# include <__bit/endian.h>
+# include <__bit/has_single_bit.h>
+# include <__bit/popcount.h>
+# include <__bit/rotate.h>
+#endif
+
+#if _LIBCPP_STD_VER >= 23
+# include <__bit/byteswap.h>
+#endif
+
#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/charconv b/libcxx/include/charconv
index 5bc7b9011be024..d2c65d31eb4185 100644
--- a/libcxx/include/charconv
+++ b/libcxx/include/charconv
@@ -69,18 +69,21 @@ namespace std {
*/
-#include <__charconv/chars_format.h>
-#include <__charconv/from_chars_integral.h>
-#include <__charconv/from_chars_result.h>
-#include <__charconv/tables.h>
-#include <__charconv/to_chars.h>
-#include <__charconv/to_chars_base_10.h>
-#include <__charconv/to_chars_floating_point.h>
-#include <__charconv/to_chars_integral.h>
-#include <__charconv/to_chars_result.h>
-#include <__charconv/traits.h>
#include <__config>
-#include <__system_error/errc.h>
+
+#if _LIBCPP_STD_VER >= 17
+# include <__charconv/chars_format.h>
+# include <__charconv/from_chars_integral.h>
+# include <__charconv/from_chars_result.h>
+# include <__charconv/tables.h>
+# include <__charconv/to_chars.h>
+# include <__charconv/to_chars_base_10.h>
+# include <__charconv/to_chars_floating_point.h>
+# include <__charconv/to_chars_integral.h>
+# include <__charconv/to_chars_result.h>
+# include <__charconv/traits.h>
+#endif // _LIBCPP_STD_VER >= 17
+
#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/chrono b/libcxx/include/chrono
index 5eddd050196dec..df8af4ca41ae62 100644
--- a/libcxx/include/chrono
+++ b/libcxx/include/chrono
@@ -880,28 +880,48 @@ constexpr chrono::year operator ""y(unsigned lo
// clang-format on
-#include <__chrono/calendar.h>
-#include <__chrono/convert_to_timespec.h>
-#include <__chrono/convert_to_tm.h>
-#include <__chrono/day.h>
+#include <__config>
+
#include <__chrono/duration.h>
#include <__chrono/file_clock.h>
-#include <__chrono/hh_mm_ss.h>
#include <__chrono/high_resolution_clock.h>
-#include <__chrono/literals.h>
-#include <__chrono/month.h>
-#include <__chrono/month_weekday.h>
-#include <__chrono/monthday.h>
#include <__chrono/steady_clock.h>
-#include <__chrono/sys_info.h>
#include <__chrono/system_clock.h>
#include <__chrono/time_point.h>
-#include <__chrono/weekday.h>
-#include <__chrono/year.h>
-#include <__chrono/year_month.h>
-#include <__chrono/year_month_day.h>
-#include <__chrono/year_month_weekday.h>
-#include <__config>
+
+#if _LIBCPP_STD_VER >= 20
+# include <__chrono/calendar.h>
+# include <__chrono/day.h>
+# include <__chrono/hh_mm_ss.h>
+# include <__chrono/literals.h>
+# include <__chrono/month.h>
+# include <__chrono/month_weekday.h>
+# include <__chrono/monthday.h>
+# include <__chrono/sys_info.h>
+# include <__chrono/weekday.h>
+# include <__chrono/year.h>
+# include <__chrono/year_month.h>
+# include <__chrono/year_month_day.h>
+# include <__chrono/year_month_weekday.h>
+
+# if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
+# include <__chrono/formatter.h>
+# include <__chrono/ostream.h>
+# include <__chrono/parser_std_format_spec.h>
+# include <__chrono/statically_widen.h>
+# endif
+
+# if !defined(_LIBCPP_HAS_NO_TIME_ZONE_DATABASE) && !defined(_LIBCPP_HAS_NO_FILESYSTEM) && \
+ !defined(_LIBCPP_HAS_NO_LOCALIZATION)
+# include <__chrono/leap_second.h>
+# include <__chrono/time_zone.h>
+# include <__chrono/time_zone_link.h>
+# include <__chrono/tzdb.h>
+# include <__chrono/tzdb_list.h>
+# endif
+
+#endif
+
#include <version>
// standard-mandated includes
@@ -909,22 +929,6 @@ constexpr chrono::year operator ""y(unsigned lo
// [time.syn]
#include <compare>
-#if !defined(_LIBCPP_HAS_NO_LOCALIZATION) && _LIBCPP_STD_VER >= 20
-# include <__chrono/formatter.h>
-# include <__chrono/ostream.h>
-# include <__chrono/parser_std_format_spec.h>
-# include <__chrono/statically_widen.h>
-#endif
-
-#if !defined(_LIBCPP_HAS_NO_TIME_ZONE_DATABASE) && !defined(_LIBCPP_HAS_NO_FILESYSTEM) && \
- !defined(_LIBCPP_HAS_NO_LOCALIZATION)
-# include <__chrono/leap_second.h>
-# include <__chrono/time_zone.h>
-# include <__chrono/time_zone_link.h>
-# include <__chrono/tzdb.h>
-# include <__chrono/tzdb_list.h>
-#endif
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
diff --git a/libcxx/include/compare b/libcxx/include/compare
index 93953254b78436..7f8d154387802b 100644
--- a/libcxx/include/compare
+++ b/libcxx/include/compare
@@ -140,20 +140,24 @@ namespace std {
}
*/
-#include <__compare/common_comparison_category.h>
-#include <__compare/compare_partial_order_fallback.h>
-#include <__compare/compare_strong_order_fallback.h>
-#include <__compare/compare_three_way.h>
-#include <__compare/compare_three_way_result.h>
-#include <__compare/compare_weak_order_fallback.h>
-#include <__compare/is_eq.h>
-#include <__compare/ordering.h>
-#include <__compare/partial_order.h>
-#include <__compare/strong_order.h>
-#include <__compare/synth_three_way.h>
-#include <__compare/three_way_comparable.h>
-#include <__compare/weak_order.h>
#include <__config>
+
+#if _LIBCPP_STD_VER >= 20
+# include <__compare/common_comparison_category.h>
+# include <__compare/compare_partial_order_fallback.h>
+# include <__compare/compare_strong_order_fallback.h>
+# include <__compare/compare_three_way.h>
+# include <__compare/compare_three_way_result.h>
+# include <__compare/compare_weak_order_fallback.h>
+# include <__compare/is_eq.h>
+# include <__compare/ordering.h>
+# include <__compare/partial_order.h>
+# include <__compare/strong_order.h>
+# include <__compare/synth_three_way.h>
+# include <__compare/three_way_comparable.h>
+# include <__compare/weak_order.h>
+#endif // _LIBCPP_STD_VER >= 20
+
#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/concepts b/libcxx/include/concepts
index e10f5ab5ad8a18..1d8383a935df6b 100644
--- a/libcxx/include/concepts
+++ b/libcxx/include/concepts
@@ -129,29 +129,33 @@ namespace std {
*/
-#include <__concepts/arithmetic.h>
-#include <__concepts/assignable.h>
-#include <__concepts/boolean_testable.h>
-#include <__concepts/class_or_enum.h>
-#include <__concepts/common_reference_with.h>
-#include <__concepts/common_with.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/copyable.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/destructible.h>
-#include <__concepts/different_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__concepts/invocable.h>
-#include <__concepts/movable.h>
-#include <__concepts/predicate.h>
-#include <__concepts/regular.h>
-#include <__concepts/relation.h>
-#include <__concepts/same_as.h>
-#include <__concepts/semiregular.h>
-#include <__concepts/swappable.h>
-#include <__concepts/totally_ordered.h>
#include <__config>
+
+#if _LIBCPP_STD_VER >= 20
+# include <__concepts/arithmetic.h>
+# include <__concepts/assignable.h>
+# include <__concepts/boolean_testable.h>
+# include <__concepts/class_or_enum.h>
+# include <__concepts/common_reference_with.h>
+# include <__concepts/common_with.h>
+# include <__concepts/constructible.h>
+# include <__concepts/convertible_to.h>
+# include <__concepts/copyable.h>
+# include <__concepts/derived_from.h>
+# include <__concepts/destructible.h>
+# include <__concepts/different_from.h>
+# include <__concepts/equality_comparable.h>
+# include <__concepts/invocable.h>
+# include <__concepts/movable.h>
+# include <__concepts/predicate.h>
+# include <__concepts/regular.h>
+# include <__concepts/relation.h>
+# include <__concepts/same_as.h>
+# include <__concepts/semiregular.h>
+# include <__concepts/swappable.h>
+# include <__concepts/totally_ordered.h>
+#endif // _LIBCPP_STD_VER >= 20
+
#include <version>
#if _LIBCPP_STD_VER <= 20 && !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES)
diff --git a/libcxx/include/coroutine b/libcxx/include/coroutine
index b1ba83b541b4b7..d1a44e2e12dd41 100644
--- a/libcxx/include/coroutine
+++ b/libcxx/include/coroutine
@@ -39,10 +39,14 @@ struct suspend_always;
*/
#include <__config>
+
+#if _LIBCPP_STD_VER >= 20
#include <__coroutine/coroutine_handle.h>
#include <__coroutine/coroutine_traits.h>
#include <__coroutine/noop_coroutine_handle.h>
#include <__coroutine/trivial_awaitables.h>
+#endif // _LIBCPP_STD_VER >= 20
+
#include <version>
// standard-mandated includes
diff --git a/libcxx/include/module.modulemap b/libcxx/include/module.modulemap
index 372219e8f83636..ccee7029824e33 100644
--- a/libcxx/include/module.modulemap
+++ b/libcxx/include/module.modulemap
@@ -1123,7 +1123,10 @@ module std_private_charconv_to_chars [system] { header "__charcon
module std_private_charconv_to_chars_base_10 [system] { header "__charconv/to_chars_base_10.h" }
module std_private_charconv_to_chars_floating_point [system] { header "__charconv/to_chars_floating_point.h" }
module std_private_charconv_to_chars_integral [system] { header "__charconv/to_chars_integral.h" }
-module std_private_charconv_to_chars_result [system] { header "__charconv/to_chars_result.h" }
+module std_private_charconv_to_chars_result [system] {
+ header "__charconv/to_chars_result.h"
+ export *
+}
module std_private_charconv_traits [system] { header "__charconv/traits.h" }
module std_private_chrono_calendar [system] { header "__chrono/calendar.h" }
diff --git a/libcxx/include/streambuf b/libcxx/include/streambuf
index aec537866c2031..7964758c908f4c 100644
--- a/libcxx/include/streambuf
+++ b/libcxx/include/streambuf
@@ -109,6 +109,7 @@ protected:
#include <__config>
#include <__fwd/streambuf.h>
+#include <__locale>
#include <__type_traits/is_same.h>
#include <climits>
#include <ios>
diff --git a/libcxx/test/libcxx/algorithms/half_positive.pass.cpp b/libcxx/test/libcxx/algorithms/half_positive.pass.cpp
index 82d18cba37f34c..40f46974195720 100644
--- a/libcxx/test/libcxx/algorithms/half_positive.pass.cpp
+++ b/libcxx/test/libcxx/algorithms/half_positive.pass.cpp
@@ -11,10 +11,10 @@
// __half_positive divides an integer number by 2 as unsigned number for known types.
// It can be an important optimization for lower bound, for example.
-#include <algorithm>
+#include <__algorithm/half_positive.h>
#include <cassert>
+#include <cstddef>
#include <limits>
-#include <type_traits>
#include "test_macros.h"
#include "user_defined_integral.h"
diff --git a/libcxx/test/libcxx/time/convert_to_tm.pass.cpp b/libcxx/test/libcxx/time/convert_to_tm.pass.cpp
index 708d2c3ff7c29e..908a38dec83d22 100644
--- a/libcxx/test/libcxx/time/convert_to_tm.pass.cpp
+++ b/libcxx/test/libcxx/time/convert_to_tm.pass.cpp
@@ -15,6 +15,7 @@
// Most of the code is tested indirectly in the chrono formatters. This only
// tests the hour overflow.
+#include <__chrono/convert_to_tm.h>
#include <chrono>
#include <cassert>
#include <format>
diff --git a/libcxx/test/libcxx/transitive_includes/cxx03.csv b/libcxx/test/libcxx/transitive_includes/cxx03.csv
index 2e246644f626cc..4481fa652d3fa7 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx03.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx03.csv
@@ -7,7 +7,6 @@ algorithm cstdint
algorithm cstdlib
algorithm cstring
algorithm cwchar
-algorithm execution
algorithm initializer_list
algorithm iosfwd
algorithm iterator
diff --git a/libcxx/test/libcxx/transitive_includes/cxx11.csv b/libcxx/test/libcxx/transitive_includes/cxx11.csv
index e074bf1f7dcc8d..4c76a320a3e722 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx11.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx11.csv
@@ -7,7 +7,6 @@ algorithm cstdint
algorithm cstdlib
algorithm cstring
algorithm cwchar
-algorithm execution
algorithm initializer_list
algorithm iosfwd
algorithm iterator
More information about the libcxx-commits
mailing list