From: Giuseppe D'Angelo Date: Sat, 15 Mar 2025 15:04:45 +0000 (+0100) Subject: libstdc++: centralize and improve testing of shared_ptr/weak_ptr conversions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0416ac5ae0a97b09b8d4ab6617ae1c7802d2aa7f;p=thirdparty%2Fgcc.git libstdc++: centralize and improve testing of shared_ptr/weak_ptr conversions Since the conversions are under the same constraints, centralize the test in one file instead of two, testing both smart pointer classes, to ease future maintenance. This is used right away: more tests are added. Amends r15-8048-gdf0e6509bf7442. libstdc++-v3/ChangeLog: * testsuite/20_util/shared_ptr/requirements/1.cc: Test both shared_ptr and weak_ptr. Add more tests. * testsuite/20_util/weak_ptr/requirements/1.cc: Removed as superseded by the other test. Signed-off-by: Giuseppe D'Angelo --- diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc index 8ddb5d220ac..19090d1e860 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc @@ -3,31 +3,122 @@ #include #include +#include using namespace __gnu_test; +template class SmartPtr> void test01() { - std::shared_ptr ptr; - std::shared_ptr ptr2 = ptr; + SmartPtr ptr; + SmartPtr ptr2 = ptr; #if __cpp_lib_shared_ptr_arrays >= 201611L - std::shared_ptr ptr_array; - std::shared_ptr ptr_array2 = ptr_array; - std::shared_ptr ptr_array3 = ptr_array; + SmartPtr ptr_array; + SmartPtr ptr_array2 = ptr_array; + SmartPtr ptr_array3 = ptr_array; #endif } +template class SmartPtr> void test02() { - std::shared_ptr ptr; - std::shared_ptr ptr2 = ptr; + SmartPtr ptr; + SmartPtr ptr2 = ptr; #if __cpp_lib_shared_ptr_arrays >= 201611L - std::shared_ptr ptr_array; - std::shared_ptr ptr_array2 = ptr_array; - std::shared_ptr ptr_array3 = ptr_array; + SmartPtr ptr_array; + SmartPtr ptr_array2 = ptr_array; + SmartPtr ptr_array3 = ptr_array; #endif } + +template class SmartPtr> +void +test03() +{ + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + +#if __cpp_lib_shared_ptr_arrays >= 201611L + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + + static_assert( std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + static_assert( std::is_convertible, SmartPtr>::value); + + static_assert(!std::is_convertible, SmartPtr>::value); + static_assert(!std::is_convertible, SmartPtr>::value); +#endif +} + +int +main() +{ + test01(); + test01(); + + test02(); + test02(); + + test03(); + test03(); +} diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc deleted file mode 100644 index 04ea837d85a..00000000000 --- a/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc +++ /dev/null @@ -1,33 +0,0 @@ -// { dg-do compile { target c++11 } } -// { dg-require-effective-target hosted } - -#include -#include - -using namespace __gnu_test; - -void -test01() -{ - std::weak_ptr ptr; - std::weak_ptr ptr2 = ptr; - -#if __cpp_lib_shared_ptr_arrays >= 201611L - std::weak_ptr ptr_array; - std::weak_ptr ptr_array2 = ptr_array; - std::weak_ptr ptr_array3 = ptr_array; -#endif -} - -void -test02() -{ - std::weak_ptr ptr; - std::weak_ptr ptr2 = ptr; - -#if __cpp_lib_shared_ptr_arrays >= 201611L - std::weak_ptr ptr_array; - std::weak_ptr ptr_array2 = ptr_array; - std::weak_ptr ptr_array3 = ptr_array; -#endif -}