12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s 201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov#include <pthread.h> 301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov#include <stdio.h> 401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov#include <unistd.h> 501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov 601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovint fds[2]; 701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovint X; 801e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov 901e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovvoid *Thread1(void *x) { 1001e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov X = 42; 1101e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov write(fds[1], "a", 1); 1201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov return NULL; 1301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov} 1401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov 1501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovvoid *Thread2(void *x) { 1601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov char buf; 1701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov while (read(fds[0], &buf, 1) != 1) { 1801e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov } 1901e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov X = 43; 2001e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov return NULL; 2101e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov} 2201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov 2301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukovint main() { 2401e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov pipe(fds); 2501e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov pthread_t t[2]; 2601e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov pthread_create(&t[0], NULL, Thread1, NULL); 2701e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov pthread_create(&t[1], NULL, Thread2, NULL); 2801e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov pthread_join(t[0], NULL); 2901e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov pthread_join(t[1], NULL); 30bd88c187a9eaed794b9098aaf147f9dada8c5131Dmitry Vyukov printf("OK\n"); 3101e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov} 3201e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov 3301e96987f557524a351b9f2229e7c920cdb96aadDmitry Vyukov// CHECK-NOT: WARNING: ThreadSanitizer: data race 34