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 10 enum { kBufferSize = (1 << 15) }; 11 t1_start(void * ptr)12void *t1_start(void *ptr) 13 { 14 char buffer[kBufferSize]; 15 return buffer; 16 } 17 main(int argc,char ** argv)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