From: Vitaly Buka Date: Sat, 15 Apr 2023 05:38:58 +0000 (-0700) Subject: [test][sanitizer] Add another stress test for pthread_create X-Git-Tag: upstream/17.0.6~11518 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=364884e088d45b162ecb47d093f955a2333eeee1;p=platform%2Fupstream%2Fllvm.git [test][sanitizer] Add another stress test for pthread_create --- 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; +}