Re: [PATCH 1/2] testsuite: Add and use thread_fence effective-target
On Oct 2, 2023, at 1:24 AM, Christophe Lyon wrote: > > ping? > > On Sun, 10 Sept 2023 at 21:31, Christophe Lyon > wrote: > Some targets like arm-eabi with newlib and default settings rely on > __sync_synchronize() to ensure synchronization. Newlib does not > implement it by default, to make users aware they have to take special > care. > > This makes a few tests fail to link. > > This patch adds a new thread_fence effective target (similar to the > corresponding one in libstdc++ testsuite), and uses it in the tests > that need it, making them UNSUPPORTED instead of FAIL and UNRESOLVED. > > 2023-09-10 Christophe Lyon > > gcc/ > * doc/sourcebuild.texi (Other attributes): Document thread_fence > effective-target. > > gcc/testsuite/ > * g++.dg/init/array54.C: Require thread_fence. > * gcc.dg/c2x-nullptr-1.c: Likewise. > * gcc.dg/pr103721-2.c: Likewise. > * lib/target-supports.exp (check_effective_target_thread_fence): > New. Ok.
Re: [PATCH 1/2] testsuite: Add and use thread_fence effective-target
Ping? Le lun. 2 oct. 2023, 10:24, Christophe Lyon a écrit : > ping? > > On Sun, 10 Sept 2023 at 21:31, Christophe Lyon > wrote: > >> Some targets like arm-eabi with newlib and default settings rely on >> __sync_synchronize() to ensure synchronization. Newlib does not >> implement it by default, to make users aware they have to take special >> care. >> >> This makes a few tests fail to link. >> >> This patch adds a new thread_fence effective target (similar to the >> corresponding one in libstdc++ testsuite), and uses it in the tests >> that need it, making them UNSUPPORTED instead of FAIL and UNRESOLVED. >> >> 2023-09-10 Christophe Lyon >> >> gcc/ >> * doc/sourcebuild.texi (Other attributes): Document thread_fence >> effective-target. >> >> gcc/testsuite/ >> * g++.dg/init/array54.C: Require thread_fence. >> * gcc.dg/c2x-nullptr-1.c: Likewise. >> * gcc.dg/pr103721-2.c: Likewise. >> * lib/target-supports.exp (check_effective_target_thread_fence): >> New. >> --- >> gcc/doc/sourcebuild.texi | 4 >> gcc/testsuite/g++.dg/init/array54.C | 1 + >> gcc/testsuite/gcc.dg/c2x-nullptr-1.c | 1 + >> gcc/testsuite/gcc.dg/pr103721-2.c | 1 + >> gcc/testsuite/lib/target-supports.exp | 12 >> 5 files changed, 19 insertions(+) >> >> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi >> index 1a78b3c1abb..a5f61c29f3b 100644 >> --- a/gcc/doc/sourcebuild.texi >> +++ b/gcc/doc/sourcebuild.texi >> @@ -2860,6 +2860,10 @@ Compiler has been configured to support link-time >> optimization (LTO). >> Compiler and linker support link-time optimization relocatable linking >> with @option{-r} and @option{-flto} options. >> >> +@item thread_fence >> +Target implements @code{__atomic_thread_fence} without relying on >> +non-implemented @code{__sync_synchronize()}. >> + >> @item naked_functions >> Target supports the @code{naked} function attribute. >> >> diff --git a/gcc/testsuite/g++.dg/init/array54.C >> b/gcc/testsuite/g++.dg/init/array54.C >> index f6be350ba72..5241e451d6d 100644 >> --- a/gcc/testsuite/g++.dg/init/array54.C >> +++ b/gcc/testsuite/g++.dg/init/array54.C >> @@ -1,5 +1,6 @@ >> // PR c++/90947 >> // { dg-do run { target c++11 } } >> +// { dg-require-effective-target thread_fence } >> >> #include >> >> diff --git a/gcc/testsuite/gcc.dg/c2x-nullptr-1.c >> b/gcc/testsuite/gcc.dg/c2x-nullptr-1.c >> index 4e440234d52..97a31c27409 100644 >> --- a/gcc/testsuite/gcc.dg/c2x-nullptr-1.c >> +++ b/gcc/testsuite/gcc.dg/c2x-nullptr-1.c >> @@ -1,5 +1,6 @@ >> /* Test valid usage of C23 nullptr. */ >> /* { dg-do run } */ >> +// { dg-require-effective-target thread_fence } >> /* { dg-options "-std=c2x -pedantic-errors -Wall -Wextra >> -Wno-unused-variable" } */ >> >> #include >> diff --git a/gcc/testsuite/gcc.dg/pr103721-2.c >> b/gcc/testsuite/gcc.dg/pr103721-2.c >> index aefa1f0f147..e059b1cfc2d 100644 >> --- a/gcc/testsuite/gcc.dg/pr103721-2.c >> +++ b/gcc/testsuite/gcc.dg/pr103721-2.c >> @@ -1,4 +1,5 @@ >> // { dg-do run } >> +// { dg-require-effective-target thread_fence } >> // { dg-options "-O2" } >> >> extern void abort (); >> diff --git a/gcc/testsuite/lib/target-supports.exp >> b/gcc/testsuite/lib/target-supports.exp >> index d353cc0aaf0..7ac9e7530cc 100644 >> --- a/gcc/testsuite/lib/target-supports.exp >> +++ b/gcc/testsuite/lib/target-supports.exp >> @@ -9107,6 +9107,18 @@ proc check_effective_target_sync_char_short { } { >> || [check_effective_target_mips_llsc] }}] >> } >> >> +# Return 1 if thread_fence does not rely on __sync_synchronize >> +# library function >> + >> +proc check_effective_target_thread_fence {} { >> +return [check_no_compiler_messages thread_fence executable { >> + int main () { >> + __atomic_thread_fence (__ATOMIC_SEQ_CST); >> + return 0; >> + } >> +} ""] >> +} >> + >> # Return 1 if the target uses a ColdFire FPU. >> >> proc check_effective_target_coldfire_fpu { } { >> -- >> 2.34.1 >> >>
Re: [PATCH 1/2] testsuite: Add and use thread_fence effective-target
ping? On Sun, 10 Sept 2023 at 21:31, Christophe Lyon wrote: > Some targets like arm-eabi with newlib and default settings rely on > __sync_synchronize() to ensure synchronization. Newlib does not > implement it by default, to make users aware they have to take special > care. > > This makes a few tests fail to link. > > This patch adds a new thread_fence effective target (similar to the > corresponding one in libstdc++ testsuite), and uses it in the tests > that need it, making them UNSUPPORTED instead of FAIL and UNRESOLVED. > > 2023-09-10 Christophe Lyon > > gcc/ > * doc/sourcebuild.texi (Other attributes): Document thread_fence > effective-target. > > gcc/testsuite/ > * g++.dg/init/array54.C: Require thread_fence. > * gcc.dg/c2x-nullptr-1.c: Likewise. > * gcc.dg/pr103721-2.c: Likewise. > * lib/target-supports.exp (check_effective_target_thread_fence): > New. > --- > gcc/doc/sourcebuild.texi | 4 > gcc/testsuite/g++.dg/init/array54.C | 1 + > gcc/testsuite/gcc.dg/c2x-nullptr-1.c | 1 + > gcc/testsuite/gcc.dg/pr103721-2.c | 1 + > gcc/testsuite/lib/target-supports.exp | 12 > 5 files changed, 19 insertions(+) > > diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi > index 1a78b3c1abb..a5f61c29f3b 100644 > --- a/gcc/doc/sourcebuild.texi > +++ b/gcc/doc/sourcebuild.texi > @@ -2860,6 +2860,10 @@ Compiler has been configured to support link-time > optimization (LTO). > Compiler and linker support link-time optimization relocatable linking > with @option{-r} and @option{-flto} options. > > +@item thread_fence > +Target implements @code{__atomic_thread_fence} without relying on > +non-implemented @code{__sync_synchronize()}. > + > @item naked_functions > Target supports the @code{naked} function attribute. > > diff --git a/gcc/testsuite/g++.dg/init/array54.C > b/gcc/testsuite/g++.dg/init/array54.C > index f6be350ba72..5241e451d6d 100644 > --- a/gcc/testsuite/g++.dg/init/array54.C > +++ b/gcc/testsuite/g++.dg/init/array54.C > @@ -1,5 +1,6 @@ > // PR c++/90947 > // { dg-do run { target c++11 } } > +// { dg-require-effective-target thread_fence } > > #include > > diff --git a/gcc/testsuite/gcc.dg/c2x-nullptr-1.c > b/gcc/testsuite/gcc.dg/c2x-nullptr-1.c > index 4e440234d52..97a31c27409 100644 > --- a/gcc/testsuite/gcc.dg/c2x-nullptr-1.c > +++ b/gcc/testsuite/gcc.dg/c2x-nullptr-1.c > @@ -1,5 +1,6 @@ > /* Test valid usage of C23 nullptr. */ > /* { dg-do run } */ > +// { dg-require-effective-target thread_fence } > /* { dg-options "-std=c2x -pedantic-errors -Wall -Wextra > -Wno-unused-variable" } */ > > #include > diff --git a/gcc/testsuite/gcc.dg/pr103721-2.c > b/gcc/testsuite/gcc.dg/pr103721-2.c > index aefa1f0f147..e059b1cfc2d 100644 > --- a/gcc/testsuite/gcc.dg/pr103721-2.c > +++ b/gcc/testsuite/gcc.dg/pr103721-2.c > @@ -1,4 +1,5 @@ > // { dg-do run } > +// { dg-require-effective-target thread_fence } > // { dg-options "-O2" } > > extern void abort (); > diff --git a/gcc/testsuite/lib/target-supports.exp > b/gcc/testsuite/lib/target-supports.exp > index d353cc0aaf0..7ac9e7530cc 100644 > --- a/gcc/testsuite/lib/target-supports.exp > +++ b/gcc/testsuite/lib/target-supports.exp > @@ -9107,6 +9107,18 @@ proc check_effective_target_sync_char_short { } { > || [check_effective_target_mips_llsc] }}] > } > > +# Return 1 if thread_fence does not rely on __sync_synchronize > +# library function > + > +proc check_effective_target_thread_fence {} { > +return [check_no_compiler_messages thread_fence executable { > + int main () { > + __atomic_thread_fence (__ATOMIC_SEQ_CST); > + return 0; > + } > +} ""] > +} > + > # Return 1 if the target uses a ColdFire FPU. > > proc check_effective_target_coldfire_fpu { } { > -- > 2.34.1 > >
[PATCH 1/2] testsuite: Add and use thread_fence effective-target
Some targets like arm-eabi with newlib and default settings rely on __sync_synchronize() to ensure synchronization. Newlib does not implement it by default, to make users aware they have to take special care. This makes a few tests fail to link. This patch adds a new thread_fence effective target (similar to the corresponding one in libstdc++ testsuite), and uses it in the tests that need it, making them UNSUPPORTED instead of FAIL and UNRESOLVED. 2023-09-10 Christophe Lyon gcc/ * doc/sourcebuild.texi (Other attributes): Document thread_fence effective-target. gcc/testsuite/ * g++.dg/init/array54.C: Require thread_fence. * gcc.dg/c2x-nullptr-1.c: Likewise. * gcc.dg/pr103721-2.c: Likewise. * lib/target-supports.exp (check_effective_target_thread_fence): New. --- gcc/doc/sourcebuild.texi | 4 gcc/testsuite/g++.dg/init/array54.C | 1 + gcc/testsuite/gcc.dg/c2x-nullptr-1.c | 1 + gcc/testsuite/gcc.dg/pr103721-2.c | 1 + gcc/testsuite/lib/target-supports.exp | 12 5 files changed, 19 insertions(+) diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 1a78b3c1abb..a5f61c29f3b 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2860,6 +2860,10 @@ Compiler has been configured to support link-time optimization (LTO). Compiler and linker support link-time optimization relocatable linking with @option{-r} and @option{-flto} options. +@item thread_fence +Target implements @code{__atomic_thread_fence} without relying on +non-implemented @code{__sync_synchronize()}. + @item naked_functions Target supports the @code{naked} function attribute. diff --git a/gcc/testsuite/g++.dg/init/array54.C b/gcc/testsuite/g++.dg/init/array54.C index f6be350ba72..5241e451d6d 100644 --- a/gcc/testsuite/g++.dg/init/array54.C +++ b/gcc/testsuite/g++.dg/init/array54.C @@ -1,5 +1,6 @@ // PR c++/90947 // { dg-do run { target c++11 } } +// { dg-require-effective-target thread_fence } #include diff --git a/gcc/testsuite/gcc.dg/c2x-nullptr-1.c b/gcc/testsuite/gcc.dg/c2x-nullptr-1.c index 4e440234d52..97a31c27409 100644 --- a/gcc/testsuite/gcc.dg/c2x-nullptr-1.c +++ b/gcc/testsuite/gcc.dg/c2x-nullptr-1.c @@ -1,5 +1,6 @@ /* Test valid usage of C23 nullptr. */ /* { dg-do run } */ +// { dg-require-effective-target thread_fence } /* { dg-options "-std=c2x -pedantic-errors -Wall -Wextra -Wno-unused-variable" } */ #include diff --git a/gcc/testsuite/gcc.dg/pr103721-2.c b/gcc/testsuite/gcc.dg/pr103721-2.c index aefa1f0f147..e059b1cfc2d 100644 --- a/gcc/testsuite/gcc.dg/pr103721-2.c +++ b/gcc/testsuite/gcc.dg/pr103721-2.c @@ -1,4 +1,5 @@ // { dg-do run } +// { dg-require-effective-target thread_fence } // { dg-options "-O2" } extern void abort (); diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index d353cc0aaf0..7ac9e7530cc 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -9107,6 +9107,18 @@ proc check_effective_target_sync_char_short { } { || [check_effective_target_mips_llsc] }}] } +# Return 1 if thread_fence does not rely on __sync_synchronize +# library function + +proc check_effective_target_thread_fence {} { +return [check_no_compiler_messages thread_fence executable { + int main () { + __atomic_thread_fence (__ATOMIC_SEQ_CST); + return 0; + } +} ""] +} + # Return 1 if the target uses a ColdFire FPU. proc check_effective_target_coldfire_fpu { } { -- 2.34.1