diff options
author | Nikolas Klauser <nikolasklauser@berlin.de> | 2024-06-17 13:09:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-17 13:09:04 +0200 |
commit | 1ba8ed0cd7d03ed9b70aaf32b3d8e9205ef95ef2 (patch) | |
tree | 3366777e5c8ebdb62e9c7e72726ebd89dda67f88 /libcxx/test | |
parent | f84056c38f1fd14881b23ace521a403e52ed7405 (diff) | |
download | llvm-1ba8ed0cd7d03ed9b70aaf32b3d8e9205ef95ef2.zip llvm-1ba8ed0cd7d03ed9b70aaf32b3d8e9205ef95ef2.tar.gz llvm-1ba8ed0cd7d03ed9b70aaf32b3d8e9205ef95ef2.tar.bz2 |
[libc++] Mark more types as trivially relocatable (#89724)
Co-authored-by: Louis Dionne <ldionne.2@gmail.com>
Diffstat (limited to 'libcxx/test')
8 files changed, 132 insertions, 0 deletions
diff --git a/libcxx/test/libcxx/transitive_includes/cxx03.csv b/libcxx/test/libcxx/transitive_includes/cxx03.csv index b0431d9..c720a0c 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx03.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx03.csv @@ -903,6 +903,7 @@ thread type_traits thread version tuple compare tuple cstddef +tuple cstdint tuple exception tuple iosfwd tuple new diff --git a/libcxx/test/libcxx/transitive_includes/cxx11.csv b/libcxx/test/libcxx/transitive_includes/cxx11.csv index 6fc8fe5..b00436a 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx11.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx11.csv @@ -910,6 +910,7 @@ thread type_traits thread version tuple compare tuple cstddef +tuple cstdint tuple exception tuple iosfwd tuple new diff --git a/libcxx/test/libcxx/transitive_includes/cxx14.csv b/libcxx/test/libcxx/transitive_includes/cxx14.csv index 5771e2b..4b8c129 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx14.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx14.csv @@ -913,6 +913,7 @@ thread type_traits thread version tuple compare tuple cstddef +tuple cstdint tuple exception tuple iosfwd tuple new diff --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv index deba8c0..a51a7e2 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx17.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv @@ -914,6 +914,7 @@ thread type_traits thread version tuple compare tuple cstddef +tuple cstdint tuple exception tuple iosfwd tuple new diff --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv index b76ec5c..5280d75 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx20.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv @@ -920,6 +920,7 @@ thread type_traits thread version tuple compare tuple cstddef +tuple cstdint tuple exception tuple iosfwd tuple new diff --git a/libcxx/test/libcxx/transitive_includes/cxx23.csv b/libcxx/test/libcxx/transitive_includes/cxx23.csv index bd0ba12..bfb8b5d 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx23.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx23.csv @@ -151,6 +151,7 @@ exception typeinfo exception version execution version expected cstddef +expected cstdint expected initializer_list expected new expected version @@ -484,6 +485,7 @@ regex typeinfo regex vector regex version scoped_allocator cstddef +scoped_allocator cstdint scoped_allocator limits scoped_allocator new scoped_allocator tuple @@ -640,6 +642,7 @@ thread typeinfo thread version tuple compare tuple cstddef +tuple cstdint tuple version type_traits cstddef type_traits cstdint @@ -674,6 +677,7 @@ unordered_set tuple unordered_set version utility compare utility cstddef +utility cstdint utility initializer_list utility limits utility version diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv index bd0ba12..bfb8b5d 100644 --- a/libcxx/test/libcxx/transitive_includes/cxx26.csv +++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv @@ -151,6 +151,7 @@ exception typeinfo exception version execution version expected cstddef +expected cstdint expected initializer_list expected new expected version @@ -484,6 +485,7 @@ regex typeinfo regex vector regex version scoped_allocator cstddef +scoped_allocator cstdint scoped_allocator limits scoped_allocator new scoped_allocator tuple @@ -640,6 +642,7 @@ thread typeinfo thread version tuple compare tuple cstddef +tuple cstdint tuple version type_traits cstddef type_traits cstdint @@ -674,6 +677,7 @@ unordered_set tuple unordered_set version utility compare utility cstddef +utility cstdint utility initializer_list utility limits utility version diff --git a/libcxx/test/libcxx/type_traits/is_trivially_relocatable.compile.pass.cpp b/libcxx/test/libcxx/type_traits/is_trivially_relocatable.compile.pass.cpp index 4d1a8ad..64d2c54 100644 --- a/libcxx/test/libcxx/type_traits/is_trivially_relocatable.compile.pass.cpp +++ b/libcxx/test/libcxx/type_traits/is_trivially_relocatable.compile.pass.cpp @@ -7,11 +7,24 @@ //===----------------------------------------------------------------------===// #include <__type_traits/is_trivially_relocatable.h> +#include <array> +#include <deque> +#include <exception> +#include <expected> #include <memory> +#include <optional> #include <string> +#include <tuple> +#include <variant> +#include <vector> #include "constexpr_char_traits.h" #include "test_allocator.h" +#include "test_macros.h" + +#ifndef TEST_HAS_NO_LOCALIZATION +# include <locale> +#endif static_assert(std::__libcpp_is_trivially_relocatable<char>::value, ""); static_assert(std::__libcpp_is_trivially_relocatable<int>::value, ""); @@ -44,9 +57,27 @@ static_assert(std::__libcpp_is_trivially_relocatable<MoveOnlyTriviallyCopyable>: #else static_assert(!std::__libcpp_is_trivially_relocatable<MoveOnlyTriviallyCopyable>::value, ""); #endif + +// library-internal types +// ---------------------- + +// __split_buffer +static_assert(std::__libcpp_is_trivially_relocatable<std::__split_buffer<int> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::__split_buffer<NotTriviallyCopyable> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::__split_buffer<int, test_allocator<int> > >::value, ""); + // standard library types // ---------------------- +// array +static_assert(std::__libcpp_is_trivially_relocatable<std::array<int, 0> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::array<NotTriviallyCopyable, 0> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::array<std::unique_ptr<int>, 0> >::value, ""); + +static_assert(std::__libcpp_is_trivially_relocatable<std::array<int, 1> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::array<NotTriviallyCopyable, 1> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::array<std::unique_ptr<int>, 1> >::value, ""); + // basic_string #if defined(_LIBCPP_HAS_NO_ASAN) || !defined(_LIBCPP_INSTRUMENTED_WITH_ASAN) struct MyChar { @@ -80,6 +111,71 @@ static_assert( std::basic_string<MyChar, NotTriviallyRelocatableCharTraits<MyChar>, test_allocator<MyChar> > >::value, ""); #endif + +// deque +static_assert(std::__libcpp_is_trivially_relocatable<std::deque<int> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::deque<NotTriviallyCopyable> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::deque<int, test_allocator<int> > >::value, ""); + +// exception_ptr +#ifndef _LIBCPP_ABI_MICROSOFT // FIXME: Is this also the case on windows? +static_assert(std::__libcpp_is_trivially_relocatable<std::exception_ptr>::value, ""); +#endif + +// expected +#if TEST_STD_VER >= 23 +static_assert(std::__libcpp_is_trivially_relocatable<std::expected<int, int> >::value); +static_assert(std::__libcpp_is_trivially_relocatable<std::expected<std::unique_ptr<int>, int>>::value); +static_assert(std::__libcpp_is_trivially_relocatable<std::expected<int, std::unique_ptr<int>>>::value); +static_assert(std::__libcpp_is_trivially_relocatable<std::expected<std::unique_ptr<int>, std::unique_ptr<int>>>::value); + +static_assert(!std::__libcpp_is_trivially_relocatable<std::expected<int, NotTriviallyCopyable>>::value); +static_assert(!std::__libcpp_is_trivially_relocatable<std::expected<NotTriviallyCopyable, int>>::value); +static_assert( + !std::__libcpp_is_trivially_relocatable<std::expected<NotTriviallyCopyable, NotTriviallyCopyable>>::value); +#endif + +// locale +#ifndef TEST_HAS_NO_LOCALIZATION +static_assert(std::__libcpp_is_trivially_relocatable<std::locale>::value, ""); +#endif + +// optional +#if TEST_STD_VER >= 17 +static_assert(std::__libcpp_is_trivially_relocatable<std::optional<int>>::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::optional<NotTriviallyCopyable>>::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::optional<std::unique_ptr<int>>>::value, ""); +#endif // TEST_STD_VER >= 17 + +// pair +static_assert(std::__libcpp_is_trivially_relocatable<std::pair<int, int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::pair<NotTriviallyCopyable, int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::pair<int, NotTriviallyCopyable> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::pair<NotTriviallyCopyable, NotTriviallyCopyable> >::value, + ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::pair<std::unique_ptr<int>, std::unique_ptr<int> > >::value, + ""); + +// shared_ptr +static_assert(std::__libcpp_is_trivially_relocatable<std::shared_ptr<NotTriviallyCopyable> >::value, ""); + +// tuple +#if TEST_STD_VER >= 11 +static_assert(std::__libcpp_is_trivially_relocatable<std::tuple<> >::value, ""); + +static_assert(std::__libcpp_is_trivially_relocatable<std::tuple<int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::tuple<NotTriviallyCopyable> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::tuple<std::unique_ptr<int> > >::value, ""); + +static_assert(std::__libcpp_is_trivially_relocatable<std::tuple<int, int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::tuple<NotTriviallyCopyable, int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::tuple<int, NotTriviallyCopyable> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::tuple<NotTriviallyCopyable, NotTriviallyCopyable> >::value, + ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::tuple<std::unique_ptr<int>, std::unique_ptr<int> > >::value, + ""); +#endif // TEST_STD_VER >= 11 + // unique_ptr struct NotTriviallyRelocatableDeleter { NotTriviallyRelocatableDeleter(const NotTriviallyRelocatableDeleter&); @@ -113,4 +209,27 @@ static_assert(!std::__libcpp_is_trivially_relocatable<std::unique_ptr<int, NotTr static_assert(!std::__libcpp_is_trivially_relocatable<std::unique_ptr<int[], NotTriviallyRelocatablePointer> >::value, ""); +// variant +#if TEST_STD_VER >= 17 +static_assert(std::__libcpp_is_trivially_relocatable<std::variant<int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::variant<NotTriviallyCopyable> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::variant<std::unique_ptr<int> > >::value, ""); + +static_assert(std::__libcpp_is_trivially_relocatable<std::variant<int, int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::variant<NotTriviallyCopyable, int> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::variant<int, NotTriviallyCopyable> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::variant<NotTriviallyCopyable, NotTriviallyCopyable> >::value, + ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::variant<std::unique_ptr<int>, std::unique_ptr<int> > >::value, + ""); +#endif // TEST_STD_VER >= 17 + +// vector +static_assert(std::__libcpp_is_trivially_relocatable<std::vector<int> >::value, ""); +static_assert(std::__libcpp_is_trivially_relocatable<std::vector<NotTriviallyCopyable> >::value, ""); +static_assert(!std::__libcpp_is_trivially_relocatable<std::vector<int, test_allocator<int> > >::value, ""); + +// weak_ptr +static_assert(std::__libcpp_is_trivially_relocatable<std::weak_ptr<NotTriviallyCopyable> >::value, ""); + // TODO: Mark all the trivially relocatable STL types as such |