15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
23285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov#include <pthread.h>
33285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov#include <stdio.h>
43285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov#include <stddef.h>
53285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov#include <unistd.h>
63285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov
73285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukovvoid *Thread(void *x) {
83285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_mutex_lock((pthread_mutex_t*)x);
93285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_mutex_unlock((pthread_mutex_t*)x);
103285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  return 0;
113285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov}
123285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov
133285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukovint main() {
143285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_mutex_t Mtx;
153285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_mutex_init(&Mtx, 0);
163285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_t t;
173285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_create(&t, 0, Thread, &Mtx);
183285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  sleep(1);
193285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_mutex_destroy(&Mtx);
203285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  pthread_join(t, 0);
213285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov  return 0;
223285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov}
233285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov
243285866e45a8521c56ba6209daf3c9f91f844fd3Dmitry Vyukov// CHECK:      WARNING: ThreadSanitizer: data race
25