diff options
Diffstat (limited to 'test/asan/TestCases/Linux/pthread_create_version.cc')
-rw-r--r-- | test/asan/TestCases/Linux/pthread_create_version.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/asan/TestCases/Linux/pthread_create_version.cc b/test/asan/TestCases/Linux/pthread_create_version.cc new file mode 100644 index 0000000000000..efdb8ca97c4f7 --- /dev/null +++ b/test/asan/TestCases/Linux/pthread_create_version.cc @@ -0,0 +1,23 @@ +// RUN: %clangxx_asan -std=c++11 -pthread %s -o %t && %run %t 2>&1 +// Regression test for the versioned pthread_create interceptor on linux/i386. +// pthread_attr_init is not intercepted and binds to the new abi +// pthread_create is intercepted; dlsym always returns the oldest version. +// This results in a crash inside pthread_create in libc. + +#include <pthread.h> +#include <stdlib.h> + +void *ThreadFunc(void *) { return nullptr; } + +int main() { + pthread_t t; + const size_t sz = 1024 * 1024; + void *p = malloc(sz); + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setstack(&attr, p, sz); + pthread_create(&t, &attr, ThreadFunc, nullptr); + pthread_join(t, nullptr); + free(p); + return 0; +} |