]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
testsuite: Add and use thread_fence effective-target
authorChristophe Lyon <christophe.lyon@linaro.org>
Fri, 8 Sep 2023 10:22:13 +0000 (10:22 +0000)
committerChristophe Lyon <christophe.lyon@linaro.org>
Mon, 6 Nov 2023 16:43:56 +0000 (16:43 +0000)
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  <christophe.lyon@linaro.org>

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
gcc/testsuite/g++.dg/init/array54.C
gcc/testsuite/gcc.dg/c2x-nullptr-1.c
gcc/testsuite/gcc.dg/pr103721-2.c
gcc/testsuite/lib/target-supports.exp

index c20af31c64237baff70f8781b1dc47f4d1a48aa9..c8611a0f2a0d33471aa8e5242be466eac0f77a79 100644 (file)
@@ -2875,6 +2875,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.
 
index f6be350ba72b1a7a19086d31361c4e1d44f0d251..5241e451d6d9a29a1aa12307a95cfb15a472b3d7 100644 (file)
@@ -1,5 +1,6 @@
 // PR c++/90947
 // { dg-do run { target c++11 } }
+// { dg-require-effective-target thread_fence }
 
 #include <atomic>
 
index 4e440234d52a852802d62aa521a53467f832f0cd..97a31c27409a51a7184e1e423ef850ff06a6526e 100644 (file)
@@ -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 <stdarg.h>
index aefa1f0f147389512574d242116912d77b96f4ae..e059b1cfc2df81212933a42ca07fbc8f7ee35ac7 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-do run }
+// { dg-require-effective-target thread_fence }
 // { dg-options "-O2" }
 
 extern void abort ();
index 024939ee2e785f89caa88783749d0c95e6ae364b..17a87db00076b7497245a1030734cca47f20a626 100644 (file)
@@ -9514,6 +9514,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 { } {