Hi! On 2025-02-20T16:36:56+0000, Jonathan Wakely <jwak...@redhat.com> wrote: > On 20/02/25 15:50 +0100, Thomas Schwinge wrote: >>From 820e015494e25187c9a5ffbd69911ec6ce612789 Mon Sep 17 00:00:00 2001 >>From: Jonathan Wakely <jwak...@redhat.com> >>Date: Thu, 20 Feb 2025 14:08:11 +0000 >>Subject: [PATCH] Fix 'libstdc++-v3/src/c++20/tzdb.cc' build for '__GTHREADS && >> !__GTHREADS_CXX0X' configurations >> >> libstdc++-v3/ >> * src/c++20/tzdb.cc [__GTHREADS && !__GTHREADS_CXX0X]: Use >> '__gnu_cxx::__mutex'. >> >>Co-authored-by: Thomas Schwinge <tschwi...@baylibre.com> >>--- >> libstdc++-v3/src/c++20/tzdb.cc | 8 +++++++- >> 1 file changed, 7 insertions(+), 1 deletion(-) >> >>diff --git a/libstdc++-v3/src/c++20/tzdb.cc b/libstdc++-v3/src/c++20/tzdb.cc >>index 7e8cce7ce8c..70ba7b0ef53 100644 >>--- a/libstdc++-v3/src/c++20/tzdb.cc >>+++ b/libstdc++-v3/src/c++20/tzdb.cc >>@@ -35,6 +35,9 @@ >> #include <atomic> // atomic<T*>, atomic<int> >> #include <memory> // atomic<shared_ptr<T>> >> #include <mutex> // mutex >>+#if defined __GTHREADS && ! defined _GLIBCXX_HAS_GHTREADS >>+# include <ext/concurrence.h> // __gnu_cxx::__mutex >>+#endif >> #include <filesystem> // filesystem::read_symlink >> >> #ifndef _AIX >>@@ -97,11 +100,14 @@ namespace std::chrono >> { >> namespace >> { >>-#if ! USE_ATOMIC_SHARED_PTR >> #ifndef __GTHREADS >> // Dummy no-op mutex type for single-threaded targets. >> struct mutex { void lock() { } void unlock() { } }; >>+#elif ! defined _GLIBCXX_HAS_GHTREADS > > This still has my GHTREADS typo.
Eh. I had fixed that, but apparently lost it. Re-fixed. > A comment here would be good too: > > // Use __gnu_cxx::__mutex is std::mutex isn't available. Added. >>+ using mutex = __gnu_cxx::__mutex; >> #endif >>+ >>+#if ! USE_ATOMIC_SHARED_PTR >> inline mutex& list_mutex() >> { >> #ifdef __GTHREAD_MUTEX_INIT > > Strictly speaking, we also need a change here, because unlike > std::mutex, __gnu_cxx::__mutex can't be initialized with `constinit`. > But that can wait, because it's not needed for your configuration. I've added an '#error' for such a configuration. (But happy to drop, if you think that's overkill.) Please see v2 of "Fix 'libstdc++-v3/src/c++20/tzdb.cc' build for '__GTHREADS && !__GTHREADS_CXX0X' configurations" attached. Still only GCN, nvptx build-tested. Grüße Thomas
>From 229e4d57fcfd036f37ad210b1780b6272dc5acd2 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwak...@redhat.com> Date: Thu, 20 Feb 2025 14:08:11 +0000 Subject: [PATCH] Fix 'libstdc++-v3/src/c++20/tzdb.cc' build for '__GTHREADS && !__GTHREADS_CXX0X' configurations libstdc++-v3/ * src/c++20/tzdb.cc [__GTHREADS && !__GTHREADS_CXX0X]: Use '__gnu_cxx::__mutex'. Co-authored-by: Thomas Schwinge <tschwi...@baylibre.com> --- libstdc++-v3/src/c++20/tzdb.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/src/c++20/tzdb.cc b/libstdc++-v3/src/c++20/tzdb.cc index 7e8cce7ce8c..e9eaf017690 100644 --- a/libstdc++-v3/src/c++20/tzdb.cc +++ b/libstdc++-v3/src/c++20/tzdb.cc @@ -35,6 +35,9 @@ #include <atomic> // atomic<T*>, atomic<int> #include <memory> // atomic<shared_ptr<T>> #include <mutex> // mutex +#if defined __GTHREADS && ! defined _GLIBCXX_HAS_GTHREADS +# include <ext/concurrence.h> // __gnu_cxx::__mutex +#endif #include <filesystem> // filesystem::read_symlink #ifndef _AIX @@ -97,11 +100,18 @@ namespace std::chrono { namespace { -#if ! USE_ATOMIC_SHARED_PTR #ifndef __GTHREADS // Dummy no-op mutex type for single-threaded targets. struct mutex { void lock() { } void unlock() { } }; +#elif ! defined _GLIBCXX_HAS_GTHREADS + // Use __gnu_cxx::__mutex is std::mutex isn't available. + using mutex = __gnu_cxx::__mutex; +# if ! USE_ATOMIC_SHARED_PTR && defined __GTHREAD_MUTEX_INIT +# error "TODO: __gnu_cxx::__mutex can't be initialized with 'constinit'" +# endif #endif + +#if ! USE_ATOMIC_SHARED_PTR inline mutex& list_mutex() { #ifdef __GTHREAD_MUTEX_INIT -- 2.34.1