From 156ab8750056c3ff440af0937806d8cdb2623816 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Wed, 5 Feb 2025 10:50:09 +0100 Subject: libcxx: Update to Clang 20. See: * https://discourse.llvm.org/t/rfc-freezing-c-03-headers-in-libc/77319 * https://discourse.llvm.org/t/rfc-project-hand-in-hand-llvm-libc-libc-code-sharing/77701 We're dropping support for C++03 for Zig due to the first change; it would be insane to ship 1018 duplicate header files just for this outdated use case. As a result of the second change, I had to bring in a subset of the headers from llvm-libc since libc++ now depends on these. Hopefully we can continue to get away with not copying the entirety of llvm-libc. --- lib/libcxx/include/algorithm | 487 ++++++++++++++++++++++--------------------- 1 file changed, 250 insertions(+), 237 deletions(-) (limited to 'lib/libcxx/include/algorithm') diff --git a/lib/libcxx/include/algorithm b/lib/libcxx/include/algorithm index 698e6f5cb7..7b4cb8e496 100644 --- a/lib/libcxx/include/algorithm +++ b/lib/libcxx/include/algorithm @@ -313,6 +313,9 @@ namespace ranges { template using for_each_result = in_fun_result; // since C++20 + template + using for_each_n_result = in_fun_result; // since C++20 + template S, class Proj = identity, indirectly_unary_invocable> Fun> constexpr ranges::for_each_result @@ -700,6 +703,12 @@ namespace ranges { ranges::lexicographical_compare(R1&& r1, R2&& r2, Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 + template + using move_result = in_out_result; // since C++20 + + template + using move_backward_result = in_out_result; // since C++20 + template S1, bidirectional_iterator I2> requires indirectly_movable constexpr ranges::move_backward_result @@ -1228,9 +1237,9 @@ template mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); template - constexpr pair // constexpr in C++20 + constexpr pair mismatch(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2); // **C++14** + InputIterator2 first2, InputIterator2 last2); // since C++14, constexpr in C++20 template constexpr pair // constexpr in C++20 @@ -1238,19 +1247,19 @@ template InputIterator2 first2, BinaryPredicate pred); template - constexpr pair // constexpr in C++20 + constexpr pair mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, - BinaryPredicate pred); // **C++14** + BinaryPredicate pred); // since C++14, constexpr in C++20 template constexpr bool // constexpr in C++20 equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); template - constexpr bool // constexpr in C++20 + constexpr bool equal(InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, InputIterator2 last2); // **C++14** + InputIterator2 first2, InputIterator2 last2); // since C++14, constexpr in C++20 template constexpr bool // constexpr in C++20 @@ -1258,10 +1267,10 @@ template InputIterator2 first2, BinaryPredicate pred); template - constexpr bool // constexpr in C++20 + constexpr bool equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, - BinaryPredicate pred); // **C++14** + BinaryPredicate pred); // since C++14, constexpr in C++20 template constexpr bool // constexpr in C++20 @@ -1269,9 +1278,9 @@ template ForwardIterator2 first2); template - constexpr bool // constexpr in C++20 + constexpr bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, - ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** + ForwardIterator2 first2, ForwardIterator2 last2); // since C++14, constexpr in C++20 template constexpr bool // constexpr in C++20 @@ -1279,10 +1288,10 @@ template ForwardIterator2 first2, BinaryPredicate pred); template - constexpr bool // constexpr in C++20 + constexpr bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, - BinaryPredicate pred); // **C++14** + BinaryPredicate pred); // since C++14, constexpr in C++20 template constexpr ForwardIterator1 // constexpr in C++20 @@ -1521,11 +1530,11 @@ template sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); template - void + constexpr void // constexpr in C++26 stable_sort(RandomAccessIterator first, RandomAccessIterator last); template - void + constexpr void // constexpr in C++26 stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); template @@ -1818,232 +1827,236 @@ template */ -#include <__config> - -#include <__algorithm/adjacent_find.h> -#include <__algorithm/all_of.h> -#include <__algorithm/any_of.h> -#include <__algorithm/binary_search.h> -#include <__algorithm/copy.h> -#include <__algorithm/copy_backward.h> -#include <__algorithm/copy_if.h> -#include <__algorithm/copy_n.h> -#include <__algorithm/count.h> -#include <__algorithm/count_if.h> -#include <__algorithm/equal.h> -#include <__algorithm/equal_range.h> -#include <__algorithm/fill.h> -#include <__algorithm/fill_n.h> -#include <__algorithm/find.h> -#include <__algorithm/find_end.h> -#include <__algorithm/find_first_of.h> -#include <__algorithm/find_if.h> -#include <__algorithm/find_if_not.h> -#include <__algorithm/for_each.h> -#include <__algorithm/generate.h> -#include <__algorithm/generate_n.h> -#include <__algorithm/includes.h> -#include <__algorithm/inplace_merge.h> -#include <__algorithm/is_heap.h> -#include <__algorithm/is_heap_until.h> -#include <__algorithm/is_partitioned.h> -#include <__algorithm/is_permutation.h> -#include <__algorithm/is_sorted.h> -#include <__algorithm/is_sorted_until.h> -#include <__algorithm/iter_swap.h> -#include <__algorithm/lexicographical_compare.h> -#include <__algorithm/lower_bound.h> -#include <__algorithm/make_heap.h> -#include <__algorithm/max.h> -#include <__algorithm/max_element.h> -#include <__algorithm/merge.h> -#include <__algorithm/min.h> -#include <__algorithm/min_element.h> -#include <__algorithm/minmax.h> -#include <__algorithm/minmax_element.h> -#include <__algorithm/mismatch.h> -#include <__algorithm/move.h> -#include <__algorithm/move_backward.h> -#include <__algorithm/next_permutation.h> -#include <__algorithm/none_of.h> -#include <__algorithm/nth_element.h> -#include <__algorithm/partial_sort.h> -#include <__algorithm/partial_sort_copy.h> -#include <__algorithm/partition.h> -#include <__algorithm/partition_copy.h> -#include <__algorithm/partition_point.h> -#include <__algorithm/pop_heap.h> -#include <__algorithm/prev_permutation.h> -#include <__algorithm/push_heap.h> -#include <__algorithm/remove.h> -#include <__algorithm/remove_copy.h> -#include <__algorithm/remove_copy_if.h> -#include <__algorithm/remove_if.h> -#include <__algorithm/replace.h> -#include <__algorithm/replace_copy.h> -#include <__algorithm/replace_copy_if.h> -#include <__algorithm/replace_if.h> -#include <__algorithm/reverse.h> -#include <__algorithm/reverse_copy.h> -#include <__algorithm/rotate.h> -#include <__algorithm/rotate_copy.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/shuffle.h> -#include <__algorithm/sort.h> -#include <__algorithm/sort_heap.h> -#include <__algorithm/stable_partition.h> -#include <__algorithm/stable_sort.h> -#include <__algorithm/swap_ranges.h> -#include <__algorithm/transform.h> -#include <__algorithm/unique.h> -#include <__algorithm/unique_copy.h> -#include <__algorithm/upper_bound.h> - -#if _LIBCPP_STD_VER >= 17 -# include <__algorithm/clamp.h> -# include <__algorithm/for_each_n.h> -# include <__algorithm/pstl.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_find_last.h> -# include <__algorithm/ranges_starts_with.h> -#endif // _LIBCPP_STD_VER >= 23 - -#include +#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) +# include <__cxx03/algorithm> +#else +# include <__config> + +# include <__algorithm/adjacent_find.h> +# include <__algorithm/all_of.h> +# include <__algorithm/any_of.h> +# include <__algorithm/binary_search.h> +# include <__algorithm/copy.h> +# include <__algorithm/copy_backward.h> +# include <__algorithm/copy_if.h> +# include <__algorithm/copy_n.h> +# include <__algorithm/count.h> +# include <__algorithm/count_if.h> +# include <__algorithm/equal.h> +# include <__algorithm/equal_range.h> +# include <__algorithm/fill.h> +# include <__algorithm/fill_n.h> +# include <__algorithm/find.h> +# include <__algorithm/find_end.h> +# include <__algorithm/find_first_of.h> +# include <__algorithm/find_if.h> +# include <__algorithm/find_if_not.h> +# include <__algorithm/for_each.h> +# include <__algorithm/generate.h> +# include <__algorithm/generate_n.h> +# include <__algorithm/includes.h> +# include <__algorithm/inplace_merge.h> +# include <__algorithm/is_heap.h> +# include <__algorithm/is_heap_until.h> +# include <__algorithm/is_partitioned.h> +# include <__algorithm/is_permutation.h> +# include <__algorithm/is_sorted.h> +# include <__algorithm/is_sorted_until.h> +# include <__algorithm/iter_swap.h> +# include <__algorithm/lexicographical_compare.h> +# include <__algorithm/lower_bound.h> +# include <__algorithm/make_heap.h> +# include <__algorithm/max.h> +# include <__algorithm/max_element.h> +# include <__algorithm/merge.h> +# include <__algorithm/min.h> +# include <__algorithm/min_element.h> +# include <__algorithm/minmax.h> +# include <__algorithm/minmax_element.h> +# include <__algorithm/mismatch.h> +# include <__algorithm/move.h> +# include <__algorithm/move_backward.h> +# include <__algorithm/next_permutation.h> +# include <__algorithm/none_of.h> +# include <__algorithm/nth_element.h> +# include <__algorithm/partial_sort.h> +# include <__algorithm/partial_sort_copy.h> +# include <__algorithm/partition.h> +# include <__algorithm/partition_copy.h> +# include <__algorithm/partition_point.h> +# include <__algorithm/pop_heap.h> +# include <__algorithm/prev_permutation.h> +# include <__algorithm/push_heap.h> +# include <__algorithm/remove.h> +# include <__algorithm/remove_copy.h> +# include <__algorithm/remove_copy_if.h> +# include <__algorithm/remove_if.h> +# include <__algorithm/replace.h> +# include <__algorithm/replace_copy.h> +# include <__algorithm/replace_copy_if.h> +# include <__algorithm/replace_if.h> +# include <__algorithm/reverse.h> +# include <__algorithm/reverse_copy.h> +# include <__algorithm/rotate.h> +# include <__algorithm/rotate_copy.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/shuffle.h> +# include <__algorithm/sort.h> +# include <__algorithm/sort_heap.h> +# include <__algorithm/stable_partition.h> +# include <__algorithm/stable_sort.h> +# include <__algorithm/swap_ranges.h> +# include <__algorithm/transform.h> +# include <__algorithm/unique.h> +# include <__algorithm/unique_copy.h> +# include <__algorithm/upper_bound.h> + +# if _LIBCPP_STD_VER >= 17 +# include <__algorithm/clamp.h> +# include <__algorithm/for_each_n.h> +# include <__algorithm/pstl.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/ranges_contains_subrange.h> +# include <__algorithm/ranges_ends_with.h> +# include <__algorithm/ranges_find_last.h> +# include <__algorithm/ranges_fold.h> +# include <__algorithm/ranges_starts_with.h> +# endif // _LIBCPP_STD_VER >= 23 + +# include // standard-mandated includes // [algorithm.syn] -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 14 -# include -#endif - -#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -#endif +# include + +# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +# endif + +# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 14 +# include +# endif + +# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# endif +#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) #endif // _LIBCPP_ALGORITHM -- cgit v1.2.3