10a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov// RUN: %clangxx_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s
20a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov#include <pthread.h>
30a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov#include <unistd.h>
40a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov
50a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukovint Global;
60a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov
70a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukovvoid *Thread1(void *x) {
80a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  sleep(1);
90a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  __atomic_fetch_add(&Global, 1, __ATOMIC_RELAXED);
100a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  return NULL;
110a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov}
120a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov
130a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukovvoid *Thread2(void *x) {
140a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  Global++;
150a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  return NULL;
160a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov}
170a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov
180a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukovint main() {
190a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  pthread_t t[2];
200a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  pthread_create(&t[0], NULL, Thread1, NULL);
210a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  pthread_create(&t[1], NULL, Thread2, NULL);
220a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  pthread_join(t[0], NULL);
230a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov  pthread_join(t[1], NULL);
240a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov}
250a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov
260a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov// CHECK: WARNING: ThreadSanitizer: data race
270a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov// CHECK:   Atomic write of size 4
280a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov// CHECK:     #0 __tsan_atomic32_fetch_add
290a07b354fe95d50911c620b42fc031868ef15cc1Dmitry Vyukov// CHECK:     #1 Thread1
30