blob: 805366c9f1ebcbcd086e54660f36cf63dce9bf94 [file] [log] [blame]
Peter Collingbourneb64d0b12015-06-15 21:08:47 +00001// 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}