1 // RUN: %clang_safestack %s -pthread -o %t
4 // Test unsafe stack deallocation with custom stack sizes, in particular ensure
5 // that we correctly deallocate small stacks and don't accidentally deallocate
13 volatile int step
= 0;
15 void *wait_until(void *ptr
) {
16 while ((int)ptr
!= step
)
19 volatile char buf
[64];
25 int main(int argc
, char **argv
) {
28 pthread_attr_t small_stack_attr
;
29 pthread_attr_init(&small_stack_attr
);
30 pthread_attr_setstacksize(&small_stack_attr
, 65536);
32 if (pthread_create(&t3
, NULL
, wait_until
, (void *)3))
34 if (pthread_create(&t1
, &small_stack_attr
, wait_until
, (void *)1))
36 if (pthread_create(&t2
, NULL
, wait_until
, (void *)2))
40 if (pthread_join(t1
, NULL
))
44 if (pthread_join(t2
, NULL
))
48 if (pthread_join(t3
, NULL
))
51 pthread_attr_destroy(&small_stack_attr
);