On Fri, Jun 6, 2025 at 3:13 PM Jonathan Wakely <jwak...@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 > >