15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
25cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov#include <pthread.h>
35cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov#include <stdio.h>
45cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov#include <unistd.h>
55cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov
65cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukovint Global;
75cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov
85cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukovvoid *Thread1(void *x) {
95cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  sleep(1);
105cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  Global++;
115cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  return 0;
125cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov}
135cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov
145cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukovvoid *Thread2(void *x) {
155cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_setname_np(pthread_self(), "foobar2");
165cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  Global--;
175cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  return 0;
185cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov}
195cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov
205cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukovint main() {
215cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_t t[2];
225cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_create(&t[0], 0, Thread1, 0);
235cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_create(&t[1], 0, Thread2, 0);
245cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_setname_np(t[0], "foobar1");
255cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_join(t[0], NULL);
265cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov  pthread_join(t[1], NULL);
275cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov}
285cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov
295cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov// CHECK: WARNING: ThreadSanitizer: data race
305cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov// CHECK:   Thread T1 'foobar1'
315cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov// CHECK:   Thread T2 'foobar2'
325cf2c460e96e593b1c772f1b02d3a217f4837fdcDmitry Vyukov
33