1// RUN: %clang_safestack %s -pthread -o %t
2// RUN: not --crash %run %t
3
4// Test that unsafe stacks are deallocated correctly on thread exit.
5
6#include <stdlib.h>
7#include <string.h>
8#include <pthread.h>
9
10enum { kBufferSize = (1 << 15) };
11
12void *t1_start(void *ptr)
13{
14  char buffer[kBufferSize];
15  return buffer;
16}
17
18int main(int argc, char **argv)
19{
20  pthread_t t1;
21  char *buffer = NULL;
22
23  if (pthread_create(&t1, NULL, t1_start, NULL))
24    abort();
25  if (pthread_join(t1, &buffer))
26    abort();
27
28  // should segfault here
29  memset(buffer, 0, kBufferSize);
30  return 0;
31}
32