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