xref: /llvm-project/compiler-rt/test/tsan/suppress_same_stacks.cpp (revision bcaeed49cb063de9fe504aa29e1cadff8a7be710)
1*bcaeed49SFangrui Song // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
2*bcaeed49SFangrui Song #include <pthread.h>
3*bcaeed49SFangrui Song 
4*bcaeed49SFangrui Song volatile int N;  // Prevent loop unrolling.
5*bcaeed49SFangrui Song int **data;
6*bcaeed49SFangrui Song 
Thread1(void * x)7*bcaeed49SFangrui Song void *Thread1(void *x) {
8*bcaeed49SFangrui Song   for (int i = 0; i < N; i++)
9*bcaeed49SFangrui Song     data[i][0] = 42;
10*bcaeed49SFangrui Song   return 0;
11*bcaeed49SFangrui Song }
12*bcaeed49SFangrui Song 
main()13*bcaeed49SFangrui Song int main() {
14*bcaeed49SFangrui Song   N = 4;
15*bcaeed49SFangrui Song   data = new int*[N];
16*bcaeed49SFangrui Song   for (int i = 0; i < N; i++)
17*bcaeed49SFangrui Song     data[i] = new int;
18*bcaeed49SFangrui Song   pthread_t t;
19*bcaeed49SFangrui Song   pthread_create(&t, 0, Thread1, 0);
20*bcaeed49SFangrui Song   Thread1(0);
21*bcaeed49SFangrui Song   pthread_join(t, 0);
22*bcaeed49SFangrui Song   for (int i = 0; i < N; i++)
23*bcaeed49SFangrui Song     delete data[i];
24*bcaeed49SFangrui Song   delete[] data;
25*bcaeed49SFangrui Song }
26*bcaeed49SFangrui Song 
27*bcaeed49SFangrui Song // CHECK: ThreadSanitizer: reported 1 warnings
28