[libc++] Remove the chrono include from algorithm

algorithm's include of chrono causes include cycles:

```
algorithm -> chrono -> __chrono/convert_to_tm.h -> __chrono/statically_widen.h -> __format/concepts.h -> __format/format_parse_context.h -> string_view -> algorithm

algorithm -> chrono -> __chrono/convert_to_tm.h -> __chrono/statically_widen.h -> __format/concepts.h -> __format/format_parse_context.h -> string_view -> functional -> __functional/boyer_moore_searcher.h -> array -> algorithm

algorithm -> chrono -> __chrono/convert_to_tm.h -> __chrono/statically_widen.h -> __format/concepts.h -> __format/format_parse_context.h -> string_view -> functional -> __functional/boyer_moore_searcher.h -> unordered_map -> algorithm

algorithm -> chrono -> __chrono/convert_to_tm.h -> __chrono/statically_widen.h -> __format/concepts.h -> __format/format_parse_context.h -> string_view -> functional -> __functional/boyer_moore_searcher.h -> vector -> algorithm
```

This is a problem for clang modules after the std mega module is broken up, because it becomes a module cycle which is a hard error.

All of the includes in the `__chrono` and `__format` headers are being used and so can't be removed. algorithm's include of chrono is already removed in C++20, whereas the array, string_view, unordered_map, vector includes of algorithm aren't removed until C++23 (and it's 4x the includes that would need removing). Unconditionally remove the chrono include from algorithm in all versions, so that the module breakup can happen (the module has to apply to all C++ versions).

Reviewed By: Mordante, #libc

Differential Revision: https://reviews.llvm.org/D148405
This commit is contained in:
Ian Anderson 2023-04-14 17:51:41 -07:00
parent f639a17892
commit 1eb74f7e83
6 changed files with 6 additions and 8 deletions

View File

@ -67,6 +67,8 @@ Deprecations and Removals
- C++2b: ``atomic``, ``bit``, ``cstdint``, ``cstdlib``, ``cstring``, ``initializer_list``, ``limits``, ``new``,
``stdexcept``, ``system_error``, ``type_traits``, ``typeinfo``
- ``<algorithm>`` no longer includes ``<chrono>`` in any C++ version (it was prevously included in C++17 and earlier).
- The headers ``<experimental/algorithm>`` and ``<experimental/functional>`` have been removed, since all the contents
have been implemented in namespace ``std`` for at least two releases.

View File

@ -1917,10 +1917,6 @@ template <class BidirectionalIterator, class Compare>
# pragma GCC system_header
#endif
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
# include <chrono>
#endif
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <atomic>
# include <bit>

View File

@ -1,6 +1,5 @@
algorithm atomic
algorithm bit
algorithm chrono
algorithm climits
algorithm concepts
algorithm cstddef
@ -854,6 +853,7 @@ thread chrono
thread compare
thread cstddef
thread cstdint
thread cstdlib
thread cstring
thread ctime
thread functional

1 algorithm atomic
2 algorithm bit
algorithm chrono
3 algorithm climits
4 algorithm concepts
5 algorithm cstddef
853 thread compare
854 thread cstddef
855 thread cstdint
856 thread cstdlib
857 thread cstring
858 thread ctime
859 thread functional

View File

@ -1,6 +1,5 @@
algorithm atomic
algorithm bit
algorithm chrono
algorithm climits
algorithm concepts
algorithm cstddef
@ -855,6 +854,7 @@ thread chrono
thread compare
thread cstddef
thread cstdint
thread cstdlib
thread cstring
thread ctime
thread functional

1 algorithm atomic
2 algorithm bit
algorithm chrono
3 algorithm climits
4 algorithm concepts
5 algorithm cstddef
854 thread compare
855 thread cstddef
856 thread cstdint
857 thread cstdlib
858 thread cstring
859 thread ctime
860 thread functional

View File

@ -1,6 +1,5 @@
algorithm atomic
algorithm bit
algorithm chrono
algorithm climits
algorithm concepts
algorithm cstddef
@ -857,6 +856,7 @@ thread chrono
thread compare
thread cstddef
thread cstdint
thread cstdlib
thread cstring
thread ctime
thread functional

1 algorithm atomic
2 algorithm bit
algorithm chrono
3 algorithm climits
4 algorithm concepts
5 algorithm cstddef
856 thread compare
857 thread cstddef
858 thread cstdint
859 thread cstdlib
860 thread cstring
861 thread ctime
862 thread functional

View File

@ -1,6 +1,5 @@
algorithm atomic
algorithm bit
algorithm chrono
algorithm climits
algorithm concepts
algorithm cstddef
@ -857,6 +856,7 @@ thread chrono
thread compare
thread cstddef
thread cstdint
thread cstdlib
thread cstring
thread ctime
thread functional

1 algorithm atomic
2 algorithm bit
algorithm chrono
3 algorithm climits
4 algorithm concepts
5 algorithm cstddef
856 thread compare
857 thread cstddef
858 thread cstdint
859 thread cstdlib
860 thread cstring
861 thread ctime
862 thread functional