diff options
Diffstat (limited to 'test/safestack/pthread-cleanup.c')
| -rw-r--r-- | test/safestack/pthread-cleanup.c | 31 | 
1 files changed, 31 insertions, 0 deletions
diff --git a/test/safestack/pthread-cleanup.c b/test/safestack/pthread-cleanup.c new file mode 100644 index 0000000000000..805366c9f1ebc --- /dev/null +++ b/test/safestack/pthread-cleanup.c @@ -0,0 +1,31 @@ +// RUN: %clang_safestack %s -pthread -o %t +// RUN: not --crash %run %t + +// Test that unsafe stacks are deallocated correctly on thread exit. + +#include <stdlib.h> +#include <string.h> +#include <pthread.h> + +enum { kBufferSize = (1 << 15) }; + +void *t1_start(void *ptr) +{ +  char buffer[kBufferSize]; +  return buffer; +} + +int main(int argc, char **argv) +{ +  pthread_t t1; +  char *buffer = NULL; + +  if (pthread_create(&t1, NULL, t1_start, NULL)) +    abort(); +  if (pthread_join(t1, &buffer)) +    abort(); + +  // should segfault here +  memset(buffer, 0, kBufferSize); +  return 0; +}  | 
