[PATCH] libstdc++: Adjust effective-target requirements for <barrier> and <semaphore>
Tomasz Kaminski
tkaminsk@redhat.com
Fri Jun 6 13:24:24 GMT 2025
On Fri, Jun 6, 2025 at 3:13 PM Jonathan Wakely <jwakely@redhat.com> wrote:
> These features depend on __cpp_lib_atomic_wait which is not available
> for freestanding, and is available when either gthreads is supported, or
> the target is linux (for futex support).
>
> libstdc++-v3/ChangeLog:
>
> * testsuite/30_threads/barrier/1.cc: Require hosted. Only
> require gthreads for non-linux targets.
> * testsuite/30_threads/barrier/2.cc: Likewise.
> * testsuite/30_threads/semaphore/1.cc: Likewise.
> * testsuite/30_threads/semaphore/2.cc: Likewise.
> * testsuite/30_threads/semaphore/cons.cc: Likewise.
> * testsuite/30_threads/semaphore/least_max_value_neg.cc:
> Likewise.
> * testsuite/30_threads/semaphore/try_acquire.cc: Likewise.
> ---
>
> This allows the semaphore tests to run for linux even when using
> --disable-threads, because they only need gthreads when futexes aren't
> available. Supporting --disable-threads isn't really an important
> configuration, but it's a simple change for these tests anyway. Similar
> changes could be made for 29_atomics/atomic/wait_notify/1.cc and other
> tests that depend on atomic waiting.
>
> Tested x86_64-linux (with and without --disable-threads) and
> sparc-solaris.
>
LGTM.
>
> libstdc++-v3/testsuite/30_threads/barrier/1.cc | 3 ++-
> libstdc++-v3/testsuite/30_threads/barrier/2.cc | 2 +-
> libstdc++-v3/testsuite/30_threads/semaphore/1.cc | 2 ++
> libstdc++-v3/testsuite/30_threads/semaphore/2.cc | 1 +
> libstdc++-v3/testsuite/30_threads/semaphore/cons.cc | 2 ++
> .../testsuite/30_threads/semaphore/least_max_value_neg.cc | 4 ++--
> libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc | 3 ++-
> 7 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/libstdc++-v3/testsuite/30_threads/barrier/1.cc
> b/libstdc++-v3/testsuite/30_threads/barrier/1.cc
> index eff8ef3a174b..01c55d96cd20 100644
> --- a/libstdc++-v3/testsuite/30_threads/barrier/1.cc
> +++ b/libstdc++-v3/testsuite/30_threads/barrier/1.cc
> @@ -16,7 +16,8 @@
> // <http://www.gnu.org/licenses/>.
>
> // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target gthreads }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> +// { dg-require-effective-target hosted }
> // { dg-add-options no_pch }
>
> #include <barrier>
> diff --git a/libstdc++-v3/testsuite/30_threads/barrier/2.cc
> b/libstdc++-v3/testsuite/30_threads/barrier/2.cc
> index e0188b3fd8ea..728030babbd1 100644
> --- a/libstdc++-v3/testsuite/30_threads/barrier/2.cc
> +++ b/libstdc++-v3/testsuite/30_threads/barrier/2.cc
> @@ -16,7 +16,7 @@
> // <http://www.gnu.org/licenses/>.
>
> // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target gthreads }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> // { dg-require-effective-target hosted }
> // { dg-add-options no_pch }
>
> diff --git a/libstdc++-v3/testsuite/30_threads/semaphore/1.cc
> b/libstdc++-v3/testsuite/30_threads/semaphore/1.cc
> index ac9f97b816fe..cc6befcc1a50 100644
> --- a/libstdc++-v3/testsuite/30_threads/semaphore/1.cc
> +++ b/libstdc++-v3/testsuite/30_threads/semaphore/1.cc
> @@ -16,6 +16,8 @@
> // <http://www.gnu.org/licenses/>.
>
> // { dg-do compile { target c++20 } }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> +// { dg-require-effective-target hosted }
> // { dg-add-options no_pch }
>
> #include <semaphore>
> diff --git a/libstdc++-v3/testsuite/30_threads/semaphore/2.cc
> b/libstdc++-v3/testsuite/30_threads/semaphore/2.cc
> index 251e96adae68..bff747c0aa33 100644
> --- a/libstdc++-v3/testsuite/30_threads/semaphore/2.cc
> +++ b/libstdc++-v3/testsuite/30_threads/semaphore/2.cc
> @@ -16,6 +16,7 @@
> // <http://www.gnu.org/licenses/>.
>
> // { dg-do compile { target c++20 } }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> // { dg-require-effective-target hosted }
> // { dg-add-options no_pch }
>
> diff --git a/libstdc++-v3/testsuite/30_threads/semaphore/cons.cc
> b/libstdc++-v3/testsuite/30_threads/semaphore/cons.cc
> index 920f7423332b..790ff2eab557 100644
> --- a/libstdc++-v3/testsuite/30_threads/semaphore/cons.cc
> +++ b/libstdc++-v3/testsuite/30_threads/semaphore/cons.cc
> @@ -1,4 +1,6 @@
> // { dg-do compile { target c++20 } }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> +// { dg-require-effective-target hosted }
>
> #include <semaphore>
>
> diff --git
> a/libstdc++-v3/testsuite/30_threads/semaphore/least_max_value_neg.cc
> b/libstdc++-v3/testsuite/30_threads/semaphore/least_max_value_neg.cc
> index 1498d38cb93a..e2680b12e5ae 100644
> --- a/libstdc++-v3/testsuite/30_threads/semaphore/least_max_value_neg.cc
> +++ b/libstdc++-v3/testsuite/30_threads/semaphore/least_max_value_neg.cc
> @@ -16,8 +16,8 @@
> // <http://www.gnu.org/licenses/>.
>
> // { dg-do compile { target c++20 } }
> -// { dg-require-effective-target pthread }
> -// { dg-require-gthreads "" }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> +// { dg-require-effective-target hosted }
>
> #include <semaphore>
>
> diff --git a/libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc
> b/libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc
> index d709126cf342..ea7859b22c6c 100644
> --- a/libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc
> +++ b/libstdc++-v3/testsuite/30_threads/semaphore/try_acquire.cc
> @@ -17,7 +17,8 @@
>
> // { dg-do run { target c++20 } }
> // { dg-additional-options "-pthread" { target pthread } }
> -// { dg-require-gthreads "" }
> +// { dg-require-effective-target gthreads { target { ! *-*-linux* } } }
> +// { dg-require-effective-target hosted }
> // { dg-add-options libatomic }
>
> #include <semaphore>
> --
> 2.49.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20250606/fee1336f/attachment.htm>
More information about the Libstdc++
mailing list