1/* { dg-shouldfail "tsan" } */
2/* { dg-additional-options "-ldl" } */
3
4#include <pthread.h>
5#include "tsan_barrier.h"
6
7static pthread_barrier_t barrier;
8
9void *Thread(void *x) {
10  pthread_mutex_lock((pthread_mutex_t*)x);
11  pthread_mutex_unlock((pthread_mutex_t*)x);
12  barrier_wait(&barrier);
13  return 0;
14}
15
16int main() {
17  barrier_init(&barrier, 2);
18  pthread_mutex_t Mtx;
19  pthread_mutex_init(&Mtx, 0);
20  pthread_t t;
21  pthread_create(&t, 0, Thread, &Mtx);
22  barrier_wait(&barrier);
23  pthread_mutex_destroy(&Mtx);
24  pthread_join(t, 0);
25  return 0;
26}
27
28/* { dg-output "WARNING: ThreadSanitizer: data race.*(\n|\r\n|\r)" } */
29