// RUN: %clang_safestack %s -pthread -o %t // RUN: %run %t // XFAIL: darwin // Test that pthreads receive their own unsafe stack. #include <stdlib.h> #include <string.h> #include <pthread.h> #include "utils.h" static int ptr_test = 42; void *t1_start(void *ptr) { if (ptr != &ptr_test) abort(); // safe stack int val = ptr_test * 5; // unsafe stack char buffer[8096]; // two pages memset(buffer, val, sizeof (buffer)); break_optimization(buffer); return ptr; } int main(int argc, char **argv) { pthread_t t1; void *ptr = NULL; if (pthread_create(&t1, NULL, t1_start, &ptr_test)) abort(); if (pthread_join(t1, &ptr)) abort(); if (ptr != &ptr_test) abort(); return 0; }