After revision r249217 the test 30_threads/thread/native_handle/typesizes.cc fails at run time on darwin with (it was UNSUPPORTED before this revision) terminate called after throwing an instance of 'std::runtime_error' what(): size of _Tp: 4 alignment of _Tp: 4 size of *(_Tp::native_handle_type): 4096 alignment of *(_Tp::native_handle_type): 4096
This was previously only run for GNU/Linux, Solaris and AIX, but is now enabled for all pthreads targets. I don't think this particular test will ever pass for targets where is_pointer<pthread_t> is true.
(In reply to Jonathan Wakely from comment #1) > This was previously only run for GNU/Linux, Solaris and AIX, but is now > enabled for all pthreads targets. I don't think this particular test will > ever pass for targets where is_pointer<pthread_t> is true. So - just skip this on Darwin, or invent some new target supports test for pthread-non-pointer? (not entirely sure that would be unequivocally trivial)
https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00493.html has a patch
Created attachment 46341 [details] updated patch I'm testing this - the posted one didn't build on Darwin.
Author: redi Date: Fri May 10 21:41:23 2019 New Revision: 271080 URL: https://gcc.gnu.org/viewcvs?rev=271080&root=gcc&view=rev Log: PR libstdc++/81266 fix std::thread::native_handle_type test The test uses remove_pointer because in most cases native_handle_type is a pointer to the actual type that the C++ class contains. However, for std::thread, native_handle_type is the same type as the type contained in std::thread, and so remove_pointer is not needed. On targets where pthread_t is a pointer type remove_pointer<native_handle_type> is not a no-op, instead it transforms pthread_t and causes the test to fail. The fix is to not apply remove_pointer when testing std::thread. PR libstdc++/81266 * testsuite/util/thread/all.h: Do not use remove_pointer for std::thread::native_handle_type. Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/testsuite/util/thread/all.h
Fixed on trunk, needed on 9 and 8.
Author: redi Date: Sat May 11 11:35:59 2019 New Revision: 271094 URL: https://gcc.gnu.org/viewcvs?rev=271094&root=gcc&view=rev Log: PR libstdc++/81266 fix std::thread::native_handle_type test The test uses remove_pointer because in most cases native_handle_type is a pointer to the actual type that the C++ class contains. However, for std::thread, native_handle_type is the same type as the type contained in std::thread, and so remove_pointer is not needed. On targets where pthread_t is a pointer type remove_pointer<native_handle_type> is not a no-op, instead it transforms pthread_t and causes the test to fail. The fix is to not apply remove_pointer when testing std::thread. Backport from mainline 2019-05-10 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/81266 * testsuite/util/thread/all.h: Do not use remove_pointer for std::thread::native_handle_type. Modified: branches/gcc-9-branch/libstdc++-v3/ChangeLog branches/gcc-9-branch/libstdc++-v3/testsuite/util/thread/all.h
Author: redi Date: Sat May 11 11:38:51 2019 New Revision: 271095 URL: https://gcc.gnu.org/viewcvs?rev=271095&root=gcc&view=rev Log: PR libstdc++/81266 fix std::thread::native_handle_type test The test uses remove_pointer because in most cases native_handle_type is a pointer to the actual type that the C++ class contains. However, for std::thread, native_handle_type is the same type as the type contained in std::thread, and so remove_pointer is not needed. On targets where pthread_t is a pointer type remove_pointer<native_handle_type> is not a no-op, instead it transforms pthread_t and causes the test to fail. The fix is to not apply remove_pointer when testing std::thread. Backport from mainline 2019-05-10 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/81266 * testsuite/util/thread/all.h: Do not use remove_pointer for std::thread::native_handle_type. Modified: branches/gcc-8-branch/libstdc++-v3/ChangeLog branches/gcc-8-branch/libstdc++-v3/testsuite/util/thread/all.h
Fixed for 8.4 and 9.2