testsuite: tsan: add fallback overload for pthread_cond_clockwait

Message ID orfs1fhf0k.fsf@lxoliva.fsfla.org
State Accepted
Headers
Series testsuite: tsan: add fallback overload for pthread_cond_clockwait |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Alexandre Oliva Nov. 9, 2023, 1:49 a.m. UTC
  LTS GNU/Linux distros from 2018, still in use, don't have
pthread_cond_clockwait.  There's no trivial way to detect it so as to
make the test conditional, but there's an easy enough way to silence
the fail due to lack of the function in libc, and that has nothing to
do with the false positive that this is testing against.

Regstrapped on x86_64-linux-gnu, also tested with gcc-13 on i686- and
x86_64-, on distros that offer and that lack pthread_cond_clockwait.  Ok
to install?


for  gcc/testsuite/ChangeLog

	* g++.dg/tsan/pthread_cond_clockwait.C: Add fallback overload.
---
 gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C |   13 +++++++++++++
 1 file changed, 13 insertions(+)
  

Comments

Mike Stump Nov. 9, 2023, 9:47 p.m. UTC | #1
On Nov 8, 2023, at 5:49 PM, Alexandre Oliva <oliva@adacore.com> wrote:
> 
> LTS GNU/Linux distros from 2018, still in use, don't have
> pthread_cond_clockwait.  There's no trivial way to detect it so as to
> make the test conditional, but there's an easy enough way to silence
> the fail due to lack of the function in libc, and that has nothing to
> do with the false positive that this is testing against.
> 
> Regstrapped on x86_64-linux-gnu, also tested with gcc-13 on i686- and
> x86_64-, on distros that offer and that lack pthread_cond_clockwait.  Ok
> to install?

Ok.
  

Patch

diff --git a/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C b/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C
index 82d6a5c8329ed..b43f3ebf80e2c 100644
--- a/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C
+++ b/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C
@@ -4,6 +4,19 @@ 
 
 #include <pthread.h>
 
+// This overloaded version should only be selected on targets that
+// don't have a pthread_cond_clockwait in pthread.h, and it will wait
+// indefinitely for the cond_signal that, in this testcase, ought to
+// be delivered.
+static inline int
+pthread_cond_clockwait (pthread_cond_t *cv,
+			pthread_mutex_t *mtx,
+			__clockid_t,
+			void const /* struct timespec */ *)
+{
+  return pthread_cond_wait (cv, mtx);
+}		   
+
 pthread_cond_t cv;
 pthread_mutex_t mtx;