[libcxx-commits] [libcxxabi] 947dfc9 - [libc++] Granularize <type_traits> includes in <utility>

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Thu Dec 22 14:17:53 PST 2022


Author: Nikolas Klauser
Date: 2022-12-22T23:17:47+01:00
New Revision: 947dfc95ca914385c181f24bbc1a16143c17b5f0

URL: https://github.com/llvm/llvm-project/commit/947dfc95ca914385c181f24bbc1a16143c17b5f0
DIFF: https://github.com/llvm/llvm-project/commit/947dfc95ca914385c181f24bbc1a16143c17b5f0.diff

LOG: [libc++] Granularize <type_traits> includes in <utility>

Reviewed By: Mordante, #libc

Spies: libcxx-commits

Differential Revision: https://reviews.llvm.org/D140426

Added: 
    

Modified: 
    libcxx/include/__compare/common_comparison_category.h
    libcxx/include/__compare/ordering.h
    libcxx/include/__compare/three_way_comparable.h
    libcxx/include/__functional/unwrap_ref.h
    libcxx/include/__utility/as_const.h
    libcxx/include/__utility/auto_cast.h
    libcxx/include/__utility/cmp.h
    libcxx/include/__utility/exchange.h
    libcxx/include/__utility/in_place.h
    libcxx/include/__utility/integer_sequence.h
    libcxx/include/__utility/move.h
    libcxx/include/__utility/pair.h
    libcxx/include/__utility/rel_ops.h
    libcxx/include/__utility/to_underlying.h
    libcxx/include/limits
    libcxx/include/module.modulemap.in
    libcxx/include/utility
    libcxx/test/libcxx/transitive_includes/cxx03.csv
    libcxx/test/libcxx/transitive_includes/cxx11.csv
    libcxx/test/libcxx/transitive_includes/cxx14.csv
    libcxx/test/libcxx/transitive_includes/cxx17.csv
    libcxx/test/libcxx/transitive_includes/cxx20.csv
    libcxx/test/libcxx/transitive_includes/cxx2b.csv
    libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp
    libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp
    libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp
    libcxx/test/std/utilities/expected/expected.unexpected/swap/swap.free.pass.cpp
    libcxx/test/std/utilities/memory/temporary.buffer/overaligned.pass.cpp
    libcxx/test/std/utilities/utility/as_const/as_const.pass.cpp
    libcxx/test/std/utilities/utility/forward/move_if_noexcept.pass.cpp
    libcxx/test/std/utilities/utility/pairs/pair.astuple/tuple_element.pass.cpp
    libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp
    libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
    libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_const_swap.pass.cpp
    libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp
    libcxxabi/src/cxa_guard_impl.h
    libcxxabi/test/guard_test_basic.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/include/__compare/common_comparison_category.h b/libcxx/include/__compare/common_comparison_category.h
index deab171846e24..d555058975391 100644
--- a/libcxx/include/__compare/common_comparison_category.h
+++ b/libcxx/include/__compare/common_comparison_category.h
@@ -11,7 +11,8 @@
 
 #include <__compare/ordering.h>
 #include <__config>
-#include <type_traits>
+#include <__type_traits/is_same.h>
+#include <cstddef>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__compare/ordering.h b/libcxx/include/__compare/ordering.h
index ab35a598a849a..ff148abf234fb 100644
--- a/libcxx/include/__compare/ordering.h
+++ b/libcxx/include/__compare/ordering.h
@@ -10,7 +10,8 @@
 #define _LIBCPP___COMPARE_ORDERING_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_same.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__compare/three_way_comparable.h b/libcxx/include/__compare/three_way_comparable.h
index cab2cb289677f..6c98916d858ea 100644
--- a/libcxx/include/__compare/three_way_comparable.h
+++ b/libcxx/include/__compare/three_way_comparable.h
@@ -16,8 +16,8 @@
 #include <__concepts/same_as.h>
 #include <__concepts/totally_ordered.h>
 #include <__config>
+#include <__type_traits/common_reference.h>
 #include <__type_traits/make_const_lvalue_ref.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__functional/unwrap_ref.h b/libcxx/include/__functional/unwrap_ref.h
index f7207934e1b48..da000d80b8c9b 100644
--- a/libcxx/include/__functional/unwrap_ref.h
+++ b/libcxx/include/__functional/unwrap_ref.h
@@ -10,6 +10,7 @@
 #define _LIBCPP___FUNCTIONAL_UNWRAP_REF_H
 
 #include <__config>
+#include <__type_traits/decay.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/as_const.h b/libcxx/include/__utility/as_const.h
index e28d7bc1a22ae..d4a72f43d4fa5 100644
--- a/libcxx/include/__utility/as_const.h
+++ b/libcxx/include/__utility/as_const.h
@@ -10,9 +10,9 @@
 #define _LIBCPP___UTILITY_AS_CONST_H
 
 #include <__config>
+#include <__type_traits/add_const.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/auto_cast.h b/libcxx/include/__utility/auto_cast.h
index e9079443959f1..381ed0c205b25 100644
--- a/libcxx/include/__utility/auto_cast.h
+++ b/libcxx/include/__utility/auto_cast.h
@@ -11,7 +11,7 @@
 #define _LIBCPP___UTILITY_AUTO_CAST_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/decay.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/cmp.h b/libcxx/include/__utility/cmp.h
index 3cfd98106705f..d448a1d084beb 100644
--- a/libcxx/include/__utility/cmp.h
+++ b/libcxx/include/__utility/cmp.h
@@ -10,10 +10,14 @@
 #define _LIBCPP___UTILITY_CMP_H
 
 #include <__config>
+#include <__type_traits/disjunction.h>
+#include <__type_traits/is_integral.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_signed.h>
+#include <__type_traits/make_unsigned.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <limits>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/exchange.h b/libcxx/include/__utility/exchange.h
index 6838fc8c626d9..8df71a17b1c06 100644
--- a/libcxx/include/__utility/exchange.h
+++ b/libcxx/include/__utility/exchange.h
@@ -10,9 +10,10 @@
 #define _LIBCPP___UTILITY_EXCHANGE_H
 
 #include <__config>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/in_place.h b/libcxx/include/__utility/in_place.h
index bedd9e1e008e1..a3518455e257a 100644
--- a/libcxx/include/__utility/in_place.h
+++ b/libcxx/include/__utility/in_place.h
@@ -10,7 +10,8 @@
 #define _LIBCPP___UTILITY_IN_PLACE_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/remove_cvref.h>
+#include <cstddef>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/integer_sequence.h b/libcxx/include/__utility/integer_sequence.h
index 9ba9d949a2a89..257b4301c0867 100644
--- a/libcxx/include/__utility/integer_sequence.h
+++ b/libcxx/include/__utility/integer_sequence.h
@@ -10,7 +10,8 @@
 #define _LIBCPP___UTILITY_INTEGER_SEQUENCE_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/is_integral.h>
+#include <cstddef>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/move.h b/libcxx/include/__utility/move.h
index 522673005b5fb..2ffcba29876af 100644
--- a/libcxx/include/__utility/move.h
+++ b/libcxx/include/__utility/move.h
@@ -11,7 +11,10 @@
 #define _LIBCPP___UTILITY_MOVE_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/remove_reference.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/pair.h b/libcxx/include/__utility/pair.h
index e1832980b3895..8151674bcc55a 100644
--- a/libcxx/include/__utility/pair.h
+++ b/libcxx/include/__utility/pair.h
@@ -19,12 +19,29 @@
 #include <__tuple_dir/tuple_element.h>
 #include <__tuple_dir/tuple_indices.h>
 #include <__tuple_dir/tuple_size.h>
+#include <__type_traits/common_reference.h>
+#include <__type_traits/common_type.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_copy_assignable.h>
+#include <__type_traits/is_default_constructible.h>
 #include <__type_traits/is_implicitly_default_constructible.h>
+#include <__type_traits/is_move_assignable.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
+#include <__type_traits/is_nothrow_copy_assignable.h>
+#include <__type_traits/is_nothrow_copy_constructible.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_swappable.h>
+#include <__type_traits/nat.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/piecewise_construct.h>
 #include <cstddef>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/rel_ops.h b/libcxx/include/__utility/rel_ops.h
index 2577e94e91f60..5f8d42c0b2a36 100644
--- a/libcxx/include/__utility/rel_ops.h
+++ b/libcxx/include/__utility/rel_ops.h
@@ -10,9 +10,6 @@
 #define _LIBCPP___UTILITY_REL_OPS_H
 
 #include <__config>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__utility/to_underlying.h b/libcxx/include/__utility/to_underlying.h
index 3428406e8d3a2..a194d3ef28c5a 100644
--- a/libcxx/include/__utility/to_underlying.h
+++ b/libcxx/include/__utility/to_underlying.h
@@ -11,7 +11,7 @@
 #define _LIBCPP___UTILITY_TO_UNDERLYING_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/underlying_type.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/limits b/libcxx/include/limits
index ee8249fa3eff1..9f5949e63cff0 100644
--- a/libcxx/include/limits
+++ b/libcxx/include/limits
@@ -104,7 +104,9 @@ template<> class numeric_limits<cv long double>;
 
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
-#include <type_traits>
+#include <__type_traits/is_arithmetic.h>
+#include <__type_traits/is_signed.h>
+#include <__type_traits/remove_cv.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
@@ -821,4 +823,8 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  include <type_traits>
+#endif
+
 #endif // _LIBCPP_LIMITS

diff  --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in
index a19a3c428a4a3..467f7580b66f7 100644
--- a/libcxx/include/module.modulemap.in
+++ b/libcxx/include/module.modulemap.in
@@ -1387,7 +1387,10 @@ module std [system] {
     module is_abstract                         { private header "__type_traits/is_abstract.h" }
     module is_aggregate                        { private header "__type_traits/is_aggregate.h" }
     module is_allocator                        { private header "__type_traits/is_allocator.h" }
-    module is_arithmetic                       { private header "__type_traits/is_arithmetic.h" }
+    module is_arithmetic {
+      private header "__type_traits/is_arithmetic.h"
+      export integral_constant
+    }
     module is_array                            { private header "__type_traits/is_array.h" }
     module is_assignable                       { private header "__type_traits/is_assignable.h" }
     module is_base_of                          { private header "__type_traits/is_base_of.h" }

diff  --git a/libcxx/include/utility b/libcxx/include/utility
index 3cc7ce5b30252..4de69f7bdea85 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -257,7 +257,6 @@ template <class T>
 #include <__utility/to_underlying.h>
 #include <__utility/transaction.h>
 #include <__utility/unreachable.h>
-#include <type_traits>
 #include <version>
 
 // standard-mandated includes
@@ -276,6 +275,7 @@ template <class T>
 
 #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
 #  include <iosfwd>
+#  include <type_traits>
 #endif
 
 #endif // _LIBCPP_UTILITY

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx03.csv b/libcxx/test/libcxx/transitive_includes/cxx03.csv
index 4064fb77c8132..f655f144ba127 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx03.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx03.csv
@@ -563,7 +563,6 @@ memory_resource mutex
 memory_resource new
 memory_resource stdexcept
 memory_resource tuple
-memory_resource type_traits
 memory_resource version
 mutex atomic
 mutex concepts

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx11.csv b/libcxx/test/libcxx/transitive_includes/cxx11.csv
index aa6fc0c95e169..33aa5f8789b90 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx11.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx11.csv
@@ -563,7 +563,6 @@ memory_resource mutex
 memory_resource new
 memory_resource stdexcept
 memory_resource tuple
-memory_resource type_traits
 memory_resource version
 mutex atomic
 mutex concepts

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx14.csv b/libcxx/test/libcxx/transitive_includes/cxx14.csv
index e2ef4a2d8d8f3..f5571400845b5 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx14.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx14.csv
@@ -565,7 +565,6 @@ memory_resource mutex
 memory_resource new
 memory_resource stdexcept
 memory_resource tuple
-memory_resource type_traits
 memory_resource version
 mutex atomic
 mutex concepts

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv
index e2ef4a2d8d8f3..f5571400845b5 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx17.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv
@@ -565,7 +565,6 @@ memory_resource mutex
 memory_resource new
 memory_resource stdexcept
 memory_resource tuple
-memory_resource type_traits
 memory_resource version
 mutex atomic
 mutex concepts

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv
index 91a829ab3ed93..f2f4c96b14f19 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx20.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv
@@ -576,7 +576,6 @@ memory_resource mutex
 memory_resource new
 memory_resource stdexcept
 memory_resource tuple
-memory_resource type_traits
 memory_resource version
 mutex atomic
 mutex concepts

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx2b.csv b/libcxx/test/libcxx/transitive_includes/cxx2b.csv
index d2b83e42cb449..084730e91a235 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx2b.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx2b.csv
@@ -122,7 +122,6 @@ complex stdexcept
 complex type_traits
 complex version
 concepts cstddef
-concepts type_traits
 concepts version
 condition_variable atomic
 condition_variable cstddef
@@ -197,7 +196,6 @@ experimental/functional vector
 experimental/iterator cstddef
 experimental/iterator iosfwd
 experimental/iterator iterator
-experimental/iterator type_traits
 experimental/list experimental/memory_resource
 experimental/list list
 experimental/map experimental/memory_resource
@@ -381,7 +379,6 @@ iterator version
 latch atomic
 latch limits
 latch version
-limits type_traits
 limits version
 list compare
 list cstddef
@@ -445,7 +442,6 @@ memory_resource mutex
 memory_resource new
 memory_resource stdexcept
 memory_resource tuple
-memory_resource type_traits
 memory_resource version
 mutex atomic
 mutex cstddef
@@ -598,7 +594,6 @@ sstream cstddef
 sstream istream
 sstream ostream
 sstream string
-sstream type_traits
 sstream version
 stack compare
 stack cstddef
@@ -717,7 +712,6 @@ utility cstddef
 utility cstdlib
 utility initializer_list
 utility limits
-utility type_traits
 utility version
 valarray cmath
 valarray cstddef

diff  --git a/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp b/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp
index 2ee914bc2358c..98363b6a14f00 100644
--- a/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp
+++ b/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/U_V.pass.cpp
@@ -14,6 +14,7 @@
 
 // template<class U, class V> pair(U&& x, V&& y);
 
+#include <type_traits>
 #include <utility>
 
 #include "test_macros.h"

diff  --git a/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp b/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp
index ef5711a16bc23..c68ed3e822305 100644
--- a/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp
+++ b/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_first_const_second.pass.cpp
@@ -14,11 +14,9 @@
 
 // pair(const T1& x, const T2& y);
 
+#include <type_traits>
 #include <utility>
 
-#include "test_macros.h"
-
-
 struct ExplicitT {
     constexpr explicit ExplicitT(int x) : value(x) {}
     constexpr explicit ExplicitT(ExplicitT const& o) : value(o.value) {}

diff  --git a/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp b/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp
index 3b43a4c17b782..497e4f4bd1faa 100644
--- a/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp
+++ b/libcxx/test/libcxx/utilities/utility/pairs/pairs.pair/const_pair_U_V.pass.cpp
@@ -14,6 +14,7 @@
 
 // template <class U, class V> EXPLICIT constexpr pair(const pair<U, V>& p);
 
+#include <type_traits>
 #include <utility>
 
 #include "test_macros.h"

diff  --git a/libcxx/test/std/utilities/expected/expected.unexpected/swap/swap.free.pass.cpp b/libcxx/test/std/utilities/expected/expected.unexpected/swap/swap.free.pass.cpp
index b70400ae3fb43..ac0fb82353470 100644
--- a/libcxx/test/std/utilities/expected/expected.unexpected/swap/swap.free.pass.cpp
+++ b/libcxx/test/std/utilities/expected/expected.unexpected/swap/swap.free.pass.cpp
@@ -16,6 +16,7 @@
 #include <cassert>
 #include <concepts>
 #include <expected>
+#include <type_traits>
 #include <utility>
 
 // test noexcept

diff  --git a/libcxx/test/std/utilities/memory/temporary.buffer/overaligned.pass.cpp b/libcxx/test/std/utilities/memory/temporary.buffer/overaligned.pass.cpp
index b8ba9885376aa..a4f534e4b212c 100644
--- a/libcxx/test/std/utilities/memory/temporary.buffer/overaligned.pass.cpp
+++ b/libcxx/test/std/utilities/memory/temporary.buffer/overaligned.pass.cpp
@@ -25,8 +25,9 @@
 //   void
 //   return_temporary_buffer(T* p);
 
-#include <memory>
 #include <cassert>
+#include <cstdint>
+#include <memory>
 #include <utility>
 
 #include "test_macros.h"

diff  --git a/libcxx/test/std/utilities/utility/as_const/as_const.pass.cpp b/libcxx/test/std/utilities/utility/as_const/as_const.pass.cpp
index 76e5fa181ebe8..3f0f9d9ec30b2 100644
--- a/libcxx/test/std/utilities/utility/as_const/as_const.pass.cpp
+++ b/libcxx/test/std/utilities/utility/as_const/as_const.pass.cpp
@@ -11,10 +11,9 @@
 // template <class T> constexpr add_const<T>& as_const(T& t) noexcept;      // C++17
 // template <class T>           add_const<T>& as_const(const T&&) = delete; // C++17
 
-#include <utility>
 #include <cassert>
-
-#include "test_macros.h"
+#include <type_traits>
+#include <utility>
 
 struct S {int i;};
 bool operator==(const S& x, const S& y) { return x.i == y.i; }

diff  --git a/libcxx/test/std/utilities/utility/forward/move_if_noexcept.pass.cpp b/libcxx/test/std/utilities/utility/forward/move_if_noexcept.pass.cpp
index d3c253eb2050b..0ae73408a7e73 100644
--- a/libcxx/test/std/utilities/utility/forward/move_if_noexcept.pass.cpp
+++ b/libcxx/test/std/utilities/utility/forward/move_if_noexcept.pass.cpp
@@ -19,6 +19,7 @@
 //     >::type
 //     move_if_noexcept(T& x);
 
+#include <type_traits>
 #include <utility>
 
 #include "test_macros.h"

diff  --git a/libcxx/test/std/utilities/utility/pairs/pair.astuple/tuple_element.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pair.astuple/tuple_element.pass.cpp
index 9ff5e0fdf71e3..ec3d7e465b105 100644
--- a/libcxx/test/std/utilities/utility/pairs/pair.astuple/tuple_element.pass.cpp
+++ b/libcxx/test/std/utilities/utility/pairs/pair.astuple/tuple_element.pass.cpp
@@ -12,10 +12,9 @@
 
 // tuple_element<I, pair<T1, T2> >::type
 
+#include <type_traits>
 #include <utility>
 
-#include "test_macros.h"
-
 template <class T1, class T2>
 void test()
 {

diff  --git a/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp
index e7f19dddc4c99..71333105439f9 100644
--- a/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/utility/pairs/pairs.pair/move_ctor.pass.cpp
@@ -14,9 +14,10 @@
 
 // pair(pair&&) = default;
 
-#include <utility>
-#include <memory>
 #include <cassert>
+#include <memory>
+#include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
index be7c0a8a8be17..27a912f58bb39 100644
--- a/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
+++ b/libcxx/test/std/utilities/utility/pairs/pairs.pair/trivial_copy_move.pass.cpp
@@ -13,8 +13,9 @@
 // pair(pair const&) = default;
 // pair(pair&&) = default;
 
-#include <utility>
 #include <cassert>
+#include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_const_swap.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_const_swap.pass.cpp
index c259afaa42609..8610cfb3b544c 100644
--- a/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_const_swap.pass.cpp
+++ b/libcxx/test/std/utilities/utility/pairs/pairs.spec/non_member_const_swap.pass.cpp
@@ -14,6 +14,7 @@
 // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
 
 #include <cassert>
+#include <type_traits>
 #include <utility>
 
 #include "test_macros.h"

diff  --git a/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp b/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp
index 007c7a5bf1349..8a1afe2b41fa5 100644
--- a/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp
+++ b/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp
@@ -29,11 +29,10 @@
 // template <size_t I>
 //   inline constexpr in_place_index_t<I> in_place_index{};
 
-#include <utility>
 #include <cassert>
 #include <memory>
-
-#include "test_macros.h"
+#include <type_traits>
+#include <utility>
 
 template <class Tp, class Up>
 constexpr bool check_tag(Up) {

diff  --git a/libcxxabi/src/cxa_guard_impl.h b/libcxxabi/src/cxa_guard_impl.h
index 67bf2493c7b1a..47fe2b20bd964 100644
--- a/libcxxabi/src/cxa_guard_impl.h
+++ b/libcxxabi/src/cxa_guard_impl.h
@@ -56,6 +56,7 @@
 #endif
 
 #include <__threading_support>
+#include <cstdint>
 #include <cstring>
 #include <limits.h>
 #include <stdlib.h>

diff  --git a/libcxxabi/test/guard_test_basic.pass.cpp b/libcxxabi/test/guard_test_basic.pass.cpp
index 6b15dd042a38d..dca906a1aae7d 100644
--- a/libcxxabi/test/guard_test_basic.pass.cpp
+++ b/libcxxabi/test/guard_test_basic.pass.cpp
@@ -18,6 +18,7 @@
 #define TESTING_CXA_GUARD
 #include "../src/cxa_guard_impl.h"
 #include <cassert>
+#include <type_traits>
 
 #if defined(__clang__)
 #  pragma clang diagnostic ignored "-Wtautological-pointer-compare"


        


More information about the libcxx-commits mailing list