xref: /llvm-project/compiler-rt/test/tsan/thread_leak5.c (revision 3ab6b2347e8d940b0687fb693c861c68d1e50998)
1233f401cSDmitry Vyukov // RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
2*3ab6b234SDmitry Vyukov #include "test.h"
3e6a6183eSAlexey Samsonov 
Thread(void * x)4e6a6183eSAlexey Samsonov void *Thread(void *x) {
5*3ab6b234SDmitry Vyukov   barrier_wait(&barrier);
6e6a6183eSAlexey Samsonov   return 0;
7e6a6183eSAlexey Samsonov }
8e6a6183eSAlexey Samsonov 
main()9e6a6183eSAlexey Samsonov int main() {
10e6a6183eSAlexey Samsonov   volatile int N = 5;  // prevent loop unrolling
11*3ab6b234SDmitry Vyukov   barrier_init(&barrier, N + 1);
12e6a6183eSAlexey Samsonov   for (int i = 0; i < N; i++) {
13e6a6183eSAlexey Samsonov     pthread_t t;
14e6a6183eSAlexey Samsonov     pthread_create(&t, 0, Thread, 0);
15e6a6183eSAlexey Samsonov   }
16*3ab6b234SDmitry Vyukov   barrier_wait(&barrier);
17*3ab6b234SDmitry Vyukov   sleep(1);  // wait for the threads to finish and exit
18e6a6183eSAlexey Samsonov   return 0;
19e6a6183eSAlexey Samsonov }
20e6a6183eSAlexey Samsonov 
21e6a6183eSAlexey Samsonov // CHECK: WARNING: ThreadSanitizer: thread leak
22e6a6183eSAlexey Samsonov // CHECK:   And 4 more similar thread leaks
23