15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
24536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov#include <pthread.h>
34536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov#include <unistd.h>
44536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov
54536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukovvoid *Thread(void *x) {
64536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov  return 0;
74536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov}
84536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov
94536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukovint main() {
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  volatile int N = 5;  // prevent loop unrolling
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  for (int i = 0; i < N; i++) {
124536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov    pthread_t t;
134536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov    pthread_create(&t, 0, Thread, 0);
144536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov  }
154536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov  sleep(1);
164536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov  return 0;
174536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov}
184536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov
194536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov// CHECK: WARNING: ThreadSanitizer: thread leak
204536cb1fa7734133f404acb413589d7a6d314f4aDmitry Vyukov// CHECK:   And 4 more similar thread leaks
21