From 80b4ce1a5190ebe764b1009afae57dcef45f92c2 Mon Sep 17 00:00:00 2001 From: Michael de Lang Date: Fri, 14 May 2021 12:09:45 +0200 Subject: [PATCH] TSAN: add new test gcc/testsuite/ChangeLog: * g++.dg/tsan/pthread_cond_clockwait.C: New test. --- .../g++.dg/tsan/pthread_cond_clockwait.C | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C diff --git a/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C b/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C new file mode 100644 index 00000000000..82d6a5c8329 --- /dev/null +++ b/gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C @@ -0,0 +1,31 @@ +// Test pthread_cond_clockwait not generating false positives with tsan +// { dg-do run { target { { *-*-linux* *-*-gnu* *-*-uclinux* } && pthread } } } +// { dg-options "-fsanitize=thread -lpthread" } + +#include + +pthread_cond_t cv; +pthread_mutex_t mtx; + +void *fn(void *vp) { + pthread_mutex_lock(&mtx); + pthread_cond_signal(&cv); + pthread_mutex_unlock(&mtx); + return NULL; +} + +int main() { + pthread_mutex_lock(&mtx); + + pthread_t tid; + pthread_create(&tid, NULL, fn, NULL); + + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + ts.tv_sec += 10; + pthread_cond_clockwait(&cv, &mtx, CLOCK_MONOTONIC, &ts); + pthread_mutex_unlock(&mtx); + + pthread_join(tid, NULL); + return 0; +}