13168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// RUN: %clangxx_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s 2da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include <pthread.h> 3da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include <stdio.h> 4da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#include <unistd.h> 5da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 6da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyint Global; 7da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 8da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid __attribute__((noinline)) foo1() { 9da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany Global = 42; 10da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 11da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 12da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid __attribute__((noinline)) bar1() { 135092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov volatile int tmp = 42; 145092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov int tmp2 = tmp; 155092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov (void)tmp2; 16da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany foo1(); 17da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 18da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 19da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid __attribute__((noinline)) foo2() { 205092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov volatile int tmp = Global; 215092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov int tmp2 = tmp; 225092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov (void)tmp2; 23da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 24da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 25da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid __attribute__((noinline)) bar2() { 265092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov volatile int tmp = 42; 275092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov int tmp2 = tmp; 285092682c3a6902e460a6e439cf48b3dc7d48dc65Alexey Samsonov (void)tmp2; 29da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany foo2(); 30da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 31da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 32da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyvoid *Thread1(void *x) { 3363a22f073dcdfbabc492ca4c9eb06d0571915570Dmitry Vyukov sleep(1); 34da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany bar1(); 35da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany return NULL; 36da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 37da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 38da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyint main() { 39da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_t t; 40da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_create(&t, NULL, Thread1, NULL); 41da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany bar2(); 42da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany pthread_join(t, NULL); 43da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 44da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 45da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany// CHECK: WARNING: ThreadSanitizer: data race 46ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov// CHECK-NEXT: Write of size 4 at {{.*}} by thread T1: 473168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// CHECK-NEXT: #0 foo1{{.*}} {{.*}}simple_stack2.cc:9{{(:3)?}} ({{.*}}) 483168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// CHECK-NEXT: #1 bar1{{.*}} {{.*}}simple_stack2.cc:16{{(:3)?}} ({{.*}}) 493168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// CHECK-NEXT: #2 Thread1{{.*}} {{.*}}simple_stack2.cc:34{{(:3)?}} ({{.*}}) 50ff35f1d82b4f145b3477ef27a7a2e7b63c486988Dmitry Vyukov// CHECK: Previous read of size 4 at {{.*}} by main thread: 513168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// CHECK-NEXT: #0 foo2{{.*}} {{.*}}simple_stack2.cc:20{{(:28)?}} ({{.*}}) 523168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// CHECK-NEXT: #1 bar2{{.*}} {{.*}}simple_stack2.cc:29{{(:3)?}} ({{.*}}) 533168586f24f2d275e6fae167d9a4d98238004f43Alexey Samsonov// CHECK-NEXT: #2 main{{.*}} {{.*}}simple_stack2.cc:41{{(:3)?}} ({{.*}}) 54