From 364884e088d45b162ecb47d093f955a2333eeee1 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Fri, 14 Apr 2023 22:38:58 -0700 Subject: [PATCH] [test][sanitizer] Add another stress test for pthread_create --- .../TestCases/Posix/create_thread_loop2.cpp | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 compiler-rt/test/sanitizer_common/TestCases/Posix/create_thread_loop2.cpp diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/create_thread_loop2.cpp b/compiler-rt/test/sanitizer_common/TestCases/Posix/create_thread_loop2.cpp new file mode 100644 index 0000000..2776ad7 --- /dev/null +++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/create_thread_loop2.cpp @@ -0,0 +1,35 @@ +// Simple stress test for of pthread_create. Increase arg to use as benchmark. + +// RUN: %clangxx -O3 -pthread %s -o %t && %run %t 10 + +#include +#include +#include + +extern "C" const char *__asan_default_options() { + // 32bit asan can allocate just a few FakeStacks. + return sizeof(void *) < 8 ? "detect_stack_use_after_return=0" : ""; +} + +static void *null_func(void *args) { return nullptr; } + +static void *loop(void *args) { + uintptr_t n = (uintptr_t)args; + for (int i = 0; i < n; ++i) { + pthread_t thread; + pthread_create(&thread, 0, null_func, nullptr); + pthread_detach(thread); + } + return nullptr; +} + +int main(int argc, char **argv) { + uintptr_t n = atoi(argv[1]); + pthread_t threads[64]; + for (auto &thread : threads) + pthread_create(&thread, 0, loop, (void *)n); + + for (auto &thread : threads) + pthread_join(thread, nullptr); + return 0; +} -- 2.7.4