[libcxx-commits] [libcxxabi] 2e2f315 - [libc++] Granularize algorithm includes
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Feb 15 19:12:37 PST 2022
Author: Nikolas Klauser
Date: 2022-02-16T04:12:22+01:00
New Revision: 2e2f3158c604adb8401a2a44a03f58d4b6f1c7f9
URL: https://github.com/llvm/llvm-project/commit/2e2f3158c604adb8401a2a44a03f58d4b6f1c7f9
DIFF: https://github.com/llvm/llvm-project/commit/2e2f3158c604adb8401a2a44a03f58d4b6f1c7f9.diff
LOG: [libc++] Granularize algorithm includes
Reviewed By: Mordante, ldionne, Quuxplusone, #libc, #libc_abi
Spies: #libc_vendors, libcxx-commits, miyuki
Differential Revision: https://reviews.llvm.org/D119667
Added:
Modified:
libcxx/docs/ReleaseNotes.rst
libcxx/include/__bit_reference
libcxx/include/__filesystem/path.h
libcxx/include/__format/formatter.h
libcxx/include/__hash_table
libcxx/include/__split_buffer
libcxx/include/__tree
libcxx/include/array
libcxx/include/bitset
libcxx/include/deque
libcxx/include/experimental/functional
libcxx/include/experimental/simd
libcxx/include/ext/hash_map
libcxx/include/ext/hash_set
libcxx/include/format
libcxx/include/forward_list
libcxx/include/fstream
libcxx/include/list
libcxx/include/locale
libcxx/include/map
libcxx/include/queue
libcxx/include/random
libcxx/include/regex
libcxx/include/set
libcxx/include/string
libcxx/include/string_view
libcxx/include/unordered_map
libcxx/include/unordered_set
libcxx/include/valarray
libcxx/include/vector
libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/deduct.pass.cpp
libcxx/test/std/containers/sequences/list/list.ops/sort.pass.cpp
libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp
libcxxabi/src/demangle/Utility.h
libcxxabi/test/test_demangle.pass.cpp
Removed:
################################################################################
diff --git a/libcxx/docs/ReleaseNotes.rst b/libcxx/docs/ReleaseNotes.rst
index 0b7770271cf9b..c57a7ded2e4f9 100644
--- a/libcxx/docs/ReleaseNotes.rst
+++ b/libcxx/docs/ReleaseNotes.rst
@@ -52,6 +52,10 @@ API Changes
``<filesystem>`` header. The associated macro
``_LIBCPP_DEPRECATED_EXPERIMENTAL_FILESYSTEM`` has also been removed.
+- Transitive includes of ``<algorithm>`` have been removed. If you see compiler errors
+ related to missing declarations inside namespace ``std`` when updating libc++,
+ you are probably missing ``#include <algorithm>`` in a file where you use algorithms.
+
ABI Changes
-----------
diff --git a/libcxx/include/__bit_reference b/libcxx/include/__bit_reference
index 482738fe382ef..423acee4aa7ce 100644
--- a/libcxx/include/__bit_reference
+++ b/libcxx/include/__bit_reference
@@ -10,9 +10,13 @@
#ifndef _LIBCPP___BIT_REFERENCE
#define _LIBCPP___BIT_REFERENCE
+#include <__algorithm/min.h>
#include <__bits>
#include <__config>
-#include <algorithm>
+#include <__iterator/iterator_traits.h>
+#include <__memory/pointer_traits.h>
+#include <cstring>
+#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__filesystem/path.h b/libcxx/include/__filesystem/path.h
index 89b51075238d5..6b4b1ae9baa20 100644
--- a/libcxx/include/__filesystem/path.h
+++ b/libcxx/include/__filesystem/path.h
@@ -10,6 +10,8 @@
#ifndef _LIBCPP___FILESYSTEM_PATH_H
#define _LIBCPP___FILESYSTEM_PATH_H
+#include <__algorithm/replace.h>
+#include <__algorithm/replace_copy.h>
#include <__availability>
#include <__config>
#include <__iterator/back_insert_iterator.h>
diff --git a/libcxx/include/__format/formatter.h b/libcxx/include/__format/formatter.h
index 1f423146bbc7a..7e1ae314b5956 100644
--- a/libcxx/include/__format/formatter.h
+++ b/libcxx/include/__format/formatter.h
@@ -12,6 +12,7 @@
#include <__algorithm/copy.h>
#include <__algorithm/fill_n.h>
+#include <__algorithm/transform.h>
#include <__availability>
#include <__config>
#include <__format/format_error.h>
diff --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table
index cce9145032f2e..6b1f65c283286 100644
--- a/libcxx/include/__hash_table
+++ b/libcxx/include/__hash_table
@@ -10,10 +10,12 @@
#ifndef _LIBCPP__HASH_TABLE
#define _LIBCPP__HASH_TABLE
+#include <__algorithm/max.h>
+#include <__algorithm/min.h>
#include <__bits> // __libcpp_clz
#include <__config>
#include <__debug>
-#include <algorithm>
+#include <__functional/hash.h>
#include <cmath>
#include <initializer_list>
#include <iterator>
diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer
index bd6d2312e275c..9565e16960f3d 100644
--- a/libcxx/include/__split_buffer
+++ b/libcxx/include/__split_buffer
@@ -2,9 +2,17 @@
#ifndef _LIBCPP_SPLIT_BUFFER
#define _LIBCPP_SPLIT_BUFFER
+#include <__algorithm/max.h>
+#include <__algorithm/move.h>
+#include <__algorithm/move_backward.h>
#include <__config>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/move_iterator.h>
+#include <__memory/allocator.h>
+#include <__memory/compressed_pair.h>
#include <__utility/forward.h>
-#include <algorithm>
+#include <memory>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/__tree b/libcxx/include/__tree
index 2733a1ef4e87d..eeb6b1107e7c0 100644
--- a/libcxx/include/__tree
+++ b/libcxx/include/__tree
@@ -10,9 +10,9 @@
#ifndef _LIBCPP___TREE
#define _LIBCPP___TREE
+#include <__algorithm/min.h>
#include <__config>
#include <__utility/forward.h>
-#include <algorithm>
#include <iterator>
#include <limits>
#include <memory>
diff --git a/libcxx/include/array b/libcxx/include/array
index 8d6a3b5a9f1e2..e55ee43995676 100644
--- a/libcxx/include/array
+++ b/libcxx/include/array
@@ -108,11 +108,14 @@ template <size_t I, class T, size_t N> const T&& get(const array<T, N>&&) noexce
*/
+#include <__algorithm/equal.h>
+#include <__algorithm/fill_n.h>
+#include <__algorithm/lexicographical_compare.h>
+#include <__algorithm/swap_ranges.h>
#include <__config>
#include <__debug>
#include <__tuple>
#include <__utility/unreachable.h>
-#include <algorithm>
#include <iterator>
#include <stdexcept>
#include <type_traits>
diff --git a/libcxx/include/bitset b/libcxx/include/bitset
index fa37e701345bd..875e8ef953a07 100644
--- a/libcxx/include/bitset
+++ b/libcxx/include/bitset
@@ -112,8 +112,10 @@ template <size_t N> struct hash<std::bitset<N>>;
*/
+#include <__algorithm/fill.h>
#include <__bit_reference>
#include <__config>
+#include <__functional/unary_function.h>
#include <climits>
#include <cstddef>
#include <iosfwd>
diff --git a/libcxx/include/deque b/libcxx/include/deque
index 33e7134f50a64..fc9647516a22b 100644
--- a/libcxx/include/deque
+++ b/libcxx/include/deque
@@ -160,12 +160,20 @@ template <class T, class Allocator, class Predicate>
*/
+#include <__algorithm/copy.h>
+#include <__algorithm/copy_backward.h>
+#include <__algorithm/equal.h>
+#include <__algorithm/fill_n.h>
+#include <__algorithm/lexicographical_compare.h>
+#include <__algorithm/min.h>
+#include <__algorithm/remove.h>
+#include <__algorithm/remove_if.h>
+#include <__algorithm/unwrap_iter.h>
#include <__config>
#include <__debug>
#include <__iterator/iterator_traits.h>
#include <__split_buffer>
#include <__utility/forward.h>
-#include <algorithm>
#include <compare>
#include <initializer_list>
#include <iterator>
diff --git a/libcxx/include/experimental/functional b/libcxx/include/experimental/functional
index de21ab698248d..087f7c95f5a77 100644
--- a/libcxx/include/experimental/functional
+++ b/libcxx/include/experimental/functional
@@ -62,7 +62,6 @@ inline namespace fundamentals_v1 {
#include <__debug>
#include <__memory/uses_allocator.h>
-#include <algorithm>
#include <array>
#include <experimental/__config>
#include <functional>
diff --git a/libcxx/include/experimental/simd b/libcxx/include/experimental/simd
index 6e8bfab4c3544..31426a9e155c9 100644
--- a/libcxx/include/experimental/simd
+++ b/libcxx/include/experimental/simd
@@ -649,7 +649,6 @@ public:
*/
-#include <algorithm>
#include <array>
#include <cstddef>
#include <experimental/__config>
diff --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map
index 4d9c08cd26172..1816626c977c7 100644
--- a/libcxx/include/ext/hash_map
+++ b/libcxx/include/ext/hash_map
@@ -201,6 +201,7 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
*/
+#include <__algorithm/is_permutation.h>
#include <__config>
#include <__hash_table>
#include <ext/__hash>
diff --git a/libcxx/include/ext/hash_set b/libcxx/include/ext/hash_set
index 254f482a5ae90..cbd621b3bd6f6 100644
--- a/libcxx/include/ext/hash_set
+++ b/libcxx/include/ext/hash_set
@@ -192,6 +192,7 @@ template <class Value, class Hash, class Pred, class Alloc>
*/
+#include <__algorithm/is_permutation.h>
#include <__config>
#include <__hash_table>
#include <ext/__hash>
diff --git a/libcxx/include/format b/libcxx/include/format
index 03c25f15d4920..356a3051b9368 100644
--- a/libcxx/include/format
+++ b/libcxx/include/format
@@ -122,6 +122,7 @@ namespace std {
// Enable the contents of the header only when libc++ was built with LIBCXX_ENABLE_INCOMPLETE_FEATURES.
#if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
+#include <__algorithm/clamp.h>
#include <__config>
#include <__debug>
#include <__format/format_arg.h>
diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list
index 5e864fed8f7b0..e01a8e7189395 100644
--- a/libcxx/include/forward_list
+++ b/libcxx/include/forward_list
@@ -179,9 +179,11 @@ template <class T, class Allocator, class Predicate>
*/
+#include <__algorithm/comp.h>
+#include <__algorithm/lexicographical_compare.h>
+#include <__algorithm/min.h>
#include <__config>
#include <__utility/forward.h>
-#include <algorithm>
#include <initializer_list>
#include <iterator>
#include <limits>
diff --git a/libcxx/include/fstream b/libcxx/include/fstream
index 9ee3d149f7b96..d7d8fb1ce9c4f 100644
--- a/libcxx/include/fstream
+++ b/libcxx/include/fstream
@@ -179,6 +179,7 @@ typedef basic_fstream<wchar_t> wfstream;
*/
+#include <__algorithm/max.h>
#include <__availability>
#include <__config>
#include <__debug>
diff --git a/libcxx/include/list b/libcxx/include/list
index 91e2c978cfb3e..c643cb53dba10 100644
--- a/libcxx/include/list
+++ b/libcxx/include/list
@@ -180,10 +180,13 @@ template <class T, class Allocator, class Predicate>
*/
+#include <__algorithm/comp.h>
+#include <__algorithm/equal.h>
+#include <__algorithm/lexicographical_compare.h>
+#include <__algorithm/min.h>
#include <__config>
#include <__debug>
#include <__utility/forward.h>
-#include <algorithm>
#include <initializer_list>
#include <iterator>
#include <limits>
diff --git a/libcxx/include/locale b/libcxx/include/locale
index ed2b97160d819..fa82d44130737 100644
--- a/libcxx/include/locale
+++ b/libcxx/include/locale
@@ -187,10 +187,14 @@ template <class charT> class messages_byname;
*/
+#include <__algorithm/equal.h>
+#include <__algorithm/find.h>
+#include <__algorithm/max.h>
+#include <__algorithm/reverse.h>
+#include <__algorithm/unwrap_iter.h>
#include <__config>
#include <__debug>
#include <__locale>
-#include <algorithm>
#ifndef __APPLE__
# include <cstdarg>
#endif
diff --git a/libcxx/include/map b/libcxx/include/map
index cb856fa5e1364..a68c6d1c5d344 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -528,6 +528,8 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
*/
+#include <__algorithm/equal.h>
+#include <__algorithm/lexicographical_compare.h>
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
diff --git a/libcxx/include/queue b/libcxx/include/queue
index fe0af168cfbbf..b8b7ec46d9568 100644
--- a/libcxx/include/queue
+++ b/libcxx/include/queue
@@ -217,11 +217,13 @@ template <class T, class Container, class Compare>
*/
+#include <__algorithm/make_heap.h>
+#include <__algorithm/pop_heap.h>
+#include <__algorithm/push_heap.h>
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__memory/uses_allocator.h>
#include <__utility/forward.h>
-#include <algorithm>
#include <compare>
#include <deque>
#include <functional>
diff --git a/libcxx/include/random b/libcxx/include/random
index 0c7d490bc8278..cf1ac2443afc2 100644
--- a/libcxx/include/random
+++ b/libcxx/include/random
@@ -1717,7 +1717,6 @@ class piecewise_linear_distribution
#include <initializer_list>
#include <version>
-#include <algorithm> // for backward compatibility; TODO remove it
#include <cmath> // for backward compatibility; TODO remove it
#include <cstddef> // for backward compatibility; TODO remove it
#include <cstdint> // for backward compatibility; TODO remove it
diff --git a/libcxx/include/regex b/libcxx/include/regex
index f2b53f17f147d..dadd7b9dce72d 100644
--- a/libcxx/include/regex
+++ b/libcxx/include/regex
@@ -762,6 +762,7 @@ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
} // std
*/
+#include <__algorithm/find.h>
#include <__config>
#include <__debug>
#include <__iterator/wrap_iter.h>
diff --git a/libcxx/include/set b/libcxx/include/set
index 898fa6cb7039c..b346e5707d6ea 100644
--- a/libcxx/include/set
+++ b/libcxx/include/set
@@ -471,6 +471,8 @@ erase_if(multiset<Key, Compare, Allocator>& c, Predicate pred); // C++20
*/
+#include <__algorithm/equal.h>
+#include <__algorithm/lexicographical_compare.h>
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
diff --git a/libcxx/include/string b/libcxx/include/string
index 809ae41a5bd74..3e7f2e9fe6aa3 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -518,11 +518,14 @@ basic_string<char32_t> operator "" s( const char32_t *str, size_t len ); // C++1
*/
+#include <__algorithm/max.h>
+#include <__algorithm/min.h>
+#include <__algorithm/remove.h>
+#include <__algorithm/remove_if.h>
#include <__config>
#include <__debug>
#include <__ios/fpos.h>
#include <__iterator/wrap_iter.h>
-#include <algorithm>
#include <compare>
#include <cstdio> // EOF
#include <cstdlib>
diff --git a/libcxx/include/string_view b/libcxx/include/string_view
index 48fd08326f667..a5256fb4dc547 100644
--- a/libcxx/include/string_view
+++ b/libcxx/include/string_view
@@ -195,6 +195,7 @@ namespace std {
*/
+#include <__algorithm/min.h>
#include <__config>
#include <__debug>
#include <__ranges/concepts.h>
@@ -203,7 +204,6 @@ namespace std {
#include <__ranges/enable_view.h>
#include <__ranges/size.h>
#include <__string>
-#include <algorithm>
#include <compare>
#include <iosfwd>
#include <iterator>
diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map
index f0f5d1c800a2f..34c3d184a6085 100644
--- a/libcxx/include/unordered_map
+++ b/libcxx/include/unordered_map
@@ -514,6 +514,7 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
*/
+#include <__algorithm/is_permutation.h>
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set
index b3a653f4bcd6b..bf972be44ed82 100644
--- a/libcxx/include/unordered_set
+++ b/libcxx/include/unordered_set
@@ -459,6 +459,7 @@ template <class Value, class Hash, class Pred, class Alloc>
*/
+#include <__algorithm/is_permutation.h>
#include <__config>
#include <__debug>
#include <__functional/is_transparent.h>
diff --git a/libcxx/include/valarray b/libcxx/include/valarray
index 55363982d215b..ac1ca9b204a87 100644
--- a/libcxx/include/valarray
+++ b/libcxx/include/valarray
@@ -341,8 +341,14 @@ template <class T> unspecified2 end(const valarray<T>& v);
*/
+#include <__algorithm/copy.h>
+#include <__algorithm/count.h>
+#include <__algorithm/fill.h>
+#include <__algorithm/max_element.h>
+#include <__algorithm/min.h>
+#include <__algorithm/min_element.h>
+#include <__algorithm/unwrap_iter.h>
#include <__config>
-#include <algorithm>
#include <cmath>
#include <cstddef>
#include <functional>
diff --git a/libcxx/include/vector b/libcxx/include/vector
index 43584e0675e35..26683ae238e9c 100644
--- a/libcxx/include/vector
+++ b/libcxx/include/vector
@@ -271,14 +271,22 @@ erase_if(vector<T, Allocator>& c, Predicate pred); // C++20
*/
+#include <__algorithm/copy.h>
+#include <__algorithm/equal.h>
+#include <__algorithm/fill_n.h>
+#include <__algorithm/lexicographical_compare.h>
+#include <__algorithm/remove.h>
+#include <__algorithm/remove_if.h>
+#include <__algorithm/rotate.h>
+#include <__algorithm/unwrap_iter.h>
#include <__bit_reference>
#include <__config>
#include <__debug>
+#include <__functional/hash.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/wrap_iter.h>
#include <__split_buffer>
#include <__utility/forward.h>
-#include <algorithm>
#include <climits>
#include <compare>
#include <cstdlib>
diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/deduct.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/deduct.pass.cpp
index 61f31af9b6ab6..74eb69bb08e42 100644
--- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/deduct.pass.cpp
+++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.cons/deduct.pass.cpp
@@ -14,6 +14,7 @@
// -> forward_list<typename iterator_traits<InputIterator>::value_type, Allocator>;
//
+#include <algorithm>
#include <forward_list>
#include <iterator>
#include <cassert>
diff --git a/libcxx/test/std/containers/sequences/list/list.ops/sort.pass.cpp b/libcxx/test/std/containers/sequences/list/list.ops/sort.pass.cpp
index 3157b28cee1d3..6349a3d850671 100644
--- a/libcxx/test/std/containers/sequences/list/list.ops/sort.pass.cpp
+++ b/libcxx/test/std/containers/sequences/list/list.ops/sort.pass.cpp
@@ -10,6 +10,7 @@
// void sort();
+#include <algorithm>
#include <list>
#include <random>
#include <vector>
diff --git a/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp b/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp
index 1934471794dcc..f2490372556e3 100644
--- a/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.formatter/format.formatter.spec/formatter.floating_point.pass.cpp
@@ -26,6 +26,7 @@
#include <format>
+#include <algorithm>
#include <array>
#include <cassert>
#include <cmath>
diff --git a/libcxxabi/src/demangle/Utility.h b/libcxxabi/src/demangle/Utility.h
index 97272ae64fb75..4ec821cf6da97 100644
--- a/libcxxabi/src/demangle/Utility.h
+++ b/libcxxabi/src/demangle/Utility.h
@@ -17,6 +17,7 @@
#define DEMANGLE_UTILITY_H
#include "StringView.h"
+#include <algorithm>
#include <array>
#include <cstdint>
#include <cstdlib>
diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp
index 5371f4bfc9915..cc9e4ac263e27 100644
--- a/libcxxabi/test/test_demangle.pass.cpp
+++ b/libcxxabi/test/test_demangle.pass.cpp
@@ -15,6 +15,7 @@
// UNSUPPORTED: use_system_cxx_lib && target={{.+}}-apple-macosx11.0
#include "support/timer.h"
+#include <algorithm>
#include <cassert>
#include <cstdio>
#include <cstdlib>
More information about the libcxx-commits
mailing list