| // RUN: %clang_safestack %s -pthread -o %t |
| // Test unsafe stack deallocation with custom stack sizes, in particular ensure |
| // that we correctly deallocate small stacks and don't accidentally deallocate |
| void *wait_until(void *ptr) { |
| int main(int argc, char **argv) { |
| pthread_attr_t small_stack_attr; |
| pthread_attr_init(&small_stack_attr); |
| pthread_attr_setstacksize(&small_stack_attr, 65536); |
| if (pthread_create(&t3, NULL, wait_until, (void *)3)) |
| if (pthread_create(&t1, &small_stack_attr, wait_until, (void *)1)) |
| if (pthread_create(&t2, NULL, wait_until, (void *)2)) |
| if (pthread_join(t1, NULL)) |
| if (pthread_join(t2, NULL)) |
| if (pthread_join(t3, NULL)) |
| pthread_attr_destroy(&small_stack_attr); |