llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.06k stars 11.59k forks source link

Race condition in Clang-Doc #93328

Open ilovepi opened 3 months ago

ilovepi commented 3 months ago

As part of investigating #92972 I ran clang-doc under TSAN, and it found several issues.

Here's a copy of the output clang-doc.tsan.log

Collecting infos...
Reducing 42001 infos...
==================
WARNING: ThreadSanitizer: data race (pid=240066)
  Write of size 8 at 0x720c00045e70 by main thread:
    #0 operator delete(void*) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:126:3 (clang-doc+0xe17c18) (BuildId: f5955df196676c33)
    #1 __libcpp_operator_delete<void *> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/new:279:3 (clang-doc+0xe22ee9) (BuildId: f5955df196676c33)
    #2 __do_deallocate_handle_size<> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/new:301:10 (clang-doc+0xe22ee9)
    #3 __libcpp_deallocate /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/new:316:12 (clang-doc+0xe22ee9)
    #4 __deallocate_bytes /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/builtin_new_allocator.h:50:5 (clang-doc+0xe22ee9)
    #5 __destroy_and_delete /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:225:5 (clang-doc+0xe22ee9)
    #6 void std::__2::__function::__policy::__large_destroy[abi:nn190000]<std::__2::__function::__default_alloc_func<main::$_1, void ()>>(void*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:542:5 (clang-doc+0xe22ee9)
    #7 ~__policy_func /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:694:7 (clang-doc+0xe21aec) (BuildId: f5955df196676c33)
    #8 ~function /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:981:43 (clang-doc+0xe21aec)
    #9 ~__tuple_leaf /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:295:7 (clang-doc+0xe21aec)
    #10 ~tuple /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:523:28 (clang-doc+0xe21aec)
    #11 ~__async_func /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1816:22 (clang-doc+0xe21aec)
    #12 ~__deferred_assoc_state /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21aec)
    #13 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::~__deferred_assoc_state() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21aec)
    #14 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 (clang-doc+0xe1c52c) (BuildId: f5955df196676c33)

  Previous read of size 8 at 0x720c00045e70 by thread T142 (mutexes: write M0):
    #0 operator() /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:274:19 (clang-doc+0xe22593) (BuildId: f5955df196676c33)
    #1 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe22593)
    #2 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe22593)
    #3 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe22593)
    #4 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<main::$_1, void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe22593)
    #5 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe21b6b) (BuildId: f5955df196676c33)
    #6 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe21b6b)
    #7 __invoke<std::__2::function<void ()> > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21b6b)
    #8 __execute<> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1835:12 (clang-doc+0xe21b6b)
    #9 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1829:12 (clang-doc+0xe21b6b)
    #10 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::__execute() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:811:5 (clang-doc+0xe21b6b)
    #11 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33)
    #12 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac)
    #13 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac)
    #14 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac)
    #15 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac)
    #16 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac)
    #17 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33)
    #18 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb)
    #19 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb)
    #20 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33)
    #21 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62)
    #22 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62)
    #23 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62)
    #24 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62)
    #25 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62)
    #26 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62)

  Mutex M0 (0x7ffff2d57458) created at:
    #0 pthread_mutex_init ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1316:3 (clang-doc+0xd984d3) (BuildId: f5955df196676c33)
    #1 std::__2::__libcpp_recursive_mutex_init[abi:ne190000](pthread_mutex_t*) /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include/c++/v1/__thread/support/pthread.h:62:10 (clang-doc+0x3557dcb) (BuildId: f5955df196676c33)
    #2 std::__2::recursive_mutex::recursive_mutex() ../../../../../../llvm-llvm-project/libcxx/src/mutex.cpp:46:12 (clang-doc+0x3557dcb)
    #3 __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16 (libc.so.6+0x276c9) (BuildId: b830dcb9c6f0ee1f8679364e0f99ce35db953847)

  Thread T142 'llvm-worker-45' (tid=344839, running) created by main thread at:
    #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1023:3 (clang-doc+0xd96b21) (BuildId: f5955df196676c33)
    #1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::__2::optional<unsigned int>) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/Unix/Threading.inc:85:17 (clang-doc+0xeed185) (BuildId: f5955df196676c33)
    #2 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:131:12 (clang-doc+0xe80d58) (BuildId: f5955df196676c33)
    #3 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:78:9 (clang-doc+0xe80d58)
    #4 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator.h:166:24 (clang-doc+0xe80d58)
    #5 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26), 0> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator_traits.h:319:9 (clang-doc+0xe80d58)
    #6 __construct_one_at_end<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:896:5 (clang-doc+0xe80d58)
    #7 emplace_back<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:1519:5 (clang-doc+0xe80d58)
    #8 llvm::StdThreadPool::grow(int) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:13 (clang-doc+0xe80d58)
    #9 llvm::StdThreadPool::asyncEnqueue(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:178:5 (clang-doc+0xe82a81) (BuildId: f5955df196676c33)
    #10 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:5 (clang-doc+0xe21981) (BuildId: f5955df196676c33)
    #11 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33)
    #12 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa)

SUMMARY: ThreadSanitizer: data race /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 in main
==================
==================
WARNING: ThreadSanitizer: data race (pid=240066)
  Write of size 8 at 0x722800405e60 by main thread:
    #0 pthread_cond_destroy ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1304:3 (clang-doc+0xd98330) (BuildId: f5955df196676c33)
    #1 ~__assoc_sub_state /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:507:33 (clang-doc+0xe21b0e) (BuildId: f5955df196676c33)
    #2 ~__deferred_assoc_state /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21b0e)
    #3 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::~__deferred_assoc_state() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21b0e)
    #4 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 (clang-doc+0xe1c52c) (BuildId: f5955df196676c33)

  Previous read of size 8 at 0x722800405e60 by thread T142 (mutexes: write M0):
    #0 pthread_cond_broadcast ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1297:3 (clang-doc+0xd9818f) (BuildId: f5955df196676c33)
    #1 std::__2::__assoc_sub_state::set_value() ../../../../../../llvm-llvm-project/libcxx/src/future.cpp:67:9 (clang-doc+0x3557abb) (BuildId: f5955df196676c33)
    #2 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33)
    #3 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac)
    #4 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac)
    #5 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac)
    #6 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac)
    #7 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac)
    #8 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33)
    #9 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb)
    #10 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb)
    #11 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33)
    #12 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62)
    #13 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62)
    #14 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62)
    #15 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62)
    #16 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62)
    #17 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62)

  Location is heap block of size 152 at 0x722800405e20 allocated by main thread:
    #0 operator new(unsigned long) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:64:3 (clang-doc+0xe17482) (BuildId: f5955df196676c33)
    #1 __make_deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()> > > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1801:7 (clang-doc+0xe217ef) (BuildId: f5955df196676c33)
    #2 async<std::__2::function<void ()> > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1863:12 (clang-doc+0xe217ef)
    #3 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:113:19 (clang-doc+0xe217ef)
    #4 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33)
    #5 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa)

  Mutex M0 (0x722800405e38) created at:
    #0 pthread_mutex_lock ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1342:3 (clang-doc+0xd9880e) (BuildId: f5955df196676c33)
    #1 std::__2::__libcpp_mutex_lock[abi:ne190000](pthread_mutex_t*) /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include/c++/v1/__thread/support/pthread.h:95:10 (clang-doc+0x3557d65) (BuildId: f5955df196676c33)
    #2 std::__2::mutex::lock() ../../../../../../llvm-llvm-project/libcxx/src/mutex.cpp:29:12 (clang-doc+0x3557d65)
    #3 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33)
    #4 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa)

  Thread T142 'llvm-worker-45' (tid=344839, running) created by main thread at:
    #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1023:3 (clang-doc+0xd96b21) (BuildId: f5955df196676c33)
    #1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::__2::optional<unsigned int>) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/Unix/Threading.inc:85:17 (clang-doc+0xeed185) (BuildId: f5955df196676c33)
    #2 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:131:12 (clang-doc+0xe80d58) (BuildId: f5955df196676c33)
    #3 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:78:9 (clang-doc+0xe80d58)
    #4 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator.h:166:24 (clang-doc+0xe80d58)
    #5 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26), 0> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator_traits.h:319:9 (clang-doc+0xe80d58)
    #6 __construct_one_at_end<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:896:5 (clang-doc+0xe80d58)
    #7 emplace_back<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:1519:5 (clang-doc+0xe80d58)
    #8 llvm::StdThreadPool::grow(int) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:13 (clang-doc+0xe80d58)
    #9 llvm::StdThreadPool::asyncEnqueue(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:178:5 (clang-doc+0xe82a81) (BuildId: f5955df196676c33)
    #10 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:5 (clang-doc+0xe21981) (BuildId: f5955df196676c33)
    #11 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33)
    #12 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa)

SUMMARY: ThreadSanitizer: data race /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 in main
==================
==================
WARNING: ThreadSanitizer: data race (pid=240066)
  Write of size 8 at 0x722800405e38 by main thread:
    #0 operator delete(void*) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:126:3 (clang-doc+0xe17c18) (BuildId: f5955df196676c33)
    #1 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::~__deferred_assoc_state() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21b27) (BuildId: f5955df196676c33)
    #2 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 (clang-doc+0xe1c52c) (BuildId: f5955df196676c33)

  Previous atomic read of size 1 at 0x722800405e38 by thread T142:
    #0 pthread_mutex_lock ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1342:3 (clang-doc+0xd9880e) (BuildId: f5955df196676c33)
    #1 std::__2::__libcpp_mutex_lock[abi:ne190000](pthread_mutex_t*) /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include/c++/v1/__thread/support/pthread.h:95:10 (clang-doc+0x3557d65) (BuildId: f5955df196676c33)
    #2 std::__2::mutex::lock() ../../../../../../llvm-llvm-project/libcxx/src/mutex.cpp:29:12 (clang-doc+0x3557d65)
    #3 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33)
    #4 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac)
    #5 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac)
    #6 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac)
    #7 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac)
    #8 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac)
    #9 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33)
    #10 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb)
    #11 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb)
    #12 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33)
    #13 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62)
    #14 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62)
    #15 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62)
    #16 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62)
    #17 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62)
    #18 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62)

  Thread T142 'llvm-worker-45' (tid=344839, running) created by main thread at:
    #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1023:3 (clang-doc+0xd96b21) (BuildId: f5955df196676c33)
    #1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::__2::optional<unsigned int>) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/Unix/Threading.inc:85:17 (clang-doc+0xeed185) (BuildId: f5955df196676c33)
    #2 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:131:12 (clang-doc+0xe80d58) (BuildId: f5955df196676c33)
    #3 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:78:9 (clang-doc+0xe80d58)
    #4 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator.h:166:24 (clang-doc+0xe80d58)
    #5 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26), 0> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator_traits.h:319:9 (clang-doc+0xe80d58)
    #6 __construct_one_at_end<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:896:5 (clang-doc+0xe80d58)
    #7 emplace_back<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:1519:5 (clang-doc+0xe80d58)
    #8 llvm::StdThreadPool::grow(int) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:13 (clang-doc+0xe80d58)
    #9 llvm::StdThreadPool::asyncEnqueue(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:178:5 (clang-doc+0xe82a81) (BuildId: f5955df196676c33)
    #10 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:5 (clang-doc+0xe21981) (BuildId: f5955df196676c33)
    #11 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33)
    #12 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa)

SUMMARY: ThreadSanitizer: data race /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 in main
==================
ThreadSanitizer: Out of memory. The process has exhausted 16384MB for size class 6144.
==240066==ERROR: ThreadSanitizer: out of memory: allocator is trying to allocate 0x1588 bytes
    #0 operator new(unsigned long) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:64:3 (clang-doc+0xe17482) (BuildId: f5955df196676c33)
    #1 make_unique<clang::doc::RecordInfo> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/unique_ptr.h:620:26 (clang-doc+0x192050c) (BuildId: f5955df196676c33)
    #2 llvm::Expected<std::__2::unique_ptr<clang::doc::Info, std::__2::default_delete<clang::doc::Info>>> clang::doc::ClangDocBitcodeReader::createInfo<clang::doc::RecordInfo>(unsigned int) /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:897:29 (clang-doc+0x192050c)
    #3 clang::doc::ClangDocBitcodeReader::readBlockToInfo(unsigned int) /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:909:12 (clang-doc+0x192033f) (BuildId: f5955df196676c33)
    #4 clang::doc::ClangDocBitcodeReader::readBitcode() /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:955:24 (clang-doc+0x1921538) (BuildId: f5955df196676c33)
    #5 operator() /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:249:33 (clang-doc+0xe21d9f) (BuildId: f5955df196676c33)
    #6 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21d9f)
    #7 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21d9f)
    #8 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21d9f)
    #9 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<main::$_1, void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21d9f)
    #10 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe21b6b) (BuildId: f5955df196676c33)
    #11 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe21b6b)
    #12 __invoke<std::__2::function<void ()> > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21b6b)
    #13 __execute<> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1835:12 (clang-doc+0xe21b6b)
    #14 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1829:12 (clang-doc+0xe21b6b)
    #15 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::__execute() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:811:5 (clang-doc+0xe21b6b)
    #16 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33)
    #17 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac)
    #18 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac)
    #19 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac)
    #20 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac)
    #21 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac)
    #22 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33)
    #23 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb)
    #24 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb)
    #25 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33)
    #26 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62)
    #27 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62)
    #28 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62)
    #29 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62)
    #30 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62)
    #31 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62)
    #32 __tsan_thread_start_func ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1013:15 (clang-doc+0xd96a67) (BuildId: f5955df196676c33)

==240066==HINT: if you don't care about these errors you may set allocator_may_return_null=1
SUMMARY: ThreadSanitizer: out-of-memory /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:897:29 in llvm::Expected<std::__2::unique_ptr<clang::doc::Info, std::__2::default_delete<clang::doc::Info>>> clang::doc::ClangDocBitcodeReader::createInfo<clang::doc::RecordInfo>(unsigned int)
==240066==ERROR: ThreadSanitizer: out of memory: allocator is trying to allocate 0x1588 bytes

I haven't run this down yet, but it seems like we're probably missing a mutex somewhere in Clang-Doc's main loop from a cursory glance.

CC: @petrhosek @PeterChou1

llvmbot commented 3 months ago

@llvm/issue-subscribers-bug

Author: Paul Kirth (ilovepi)

As part of investigating #92972 I ran it under TSAN, and it found several issues. Here's a copy of the output [clang-doc.tsan.log](https://github.com/llvm/llvm-project/files/15438304/clang-doc.tsan.log) ``` Collecting infos... Reducing 42001 infos... ================== WARNING: ThreadSanitizer: data race (pid=240066) Write of size 8 at 0x720c00045e70 by main thread: #0 operator delete(void*) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:126:3 (clang-doc+0xe17c18) (BuildId: f5955df196676c33) #1 __libcpp_operator_delete<void *> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/new:279:3 (clang-doc+0xe22ee9) (BuildId: f5955df196676c33) #2 __do_deallocate_handle_size<> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/new:301:10 (clang-doc+0xe22ee9) #3 __libcpp_deallocate /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/new:316:12 (clang-doc+0xe22ee9) #4 __deallocate_bytes /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/builtin_new_allocator.h:50:5 (clang-doc+0xe22ee9) #5 __destroy_and_delete /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:225:5 (clang-doc+0xe22ee9) #6 void std::__2::__function::__policy::__large_destroy[abi:nn190000]<std::__2::__function::__default_alloc_func<main::$_1, void ()>>(void*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:542:5 (clang-doc+0xe22ee9) #7 ~__policy_func /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:694:7 (clang-doc+0xe21aec) (BuildId: f5955df196676c33) #8 ~function /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:981:43 (clang-doc+0xe21aec) #9 ~__tuple_leaf /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:295:7 (clang-doc+0xe21aec) #10 ~tuple /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:523:28 (clang-doc+0xe21aec) #11 ~__async_func /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1816:22 (clang-doc+0xe21aec) #12 ~__deferred_assoc_state /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21aec) #13 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::~__deferred_assoc_state() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21aec) #14 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 (clang-doc+0xe1c52c) (BuildId: f5955df196676c33) Previous read of size 8 at 0x720c00045e70 by thread T142 (mutexes: write M0): #0 operator() /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:274:19 (clang-doc+0xe22593) (BuildId: f5955df196676c33) #1 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe22593) #2 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe22593) #3 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe22593) #4 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<main::$_1, void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe22593) #5 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe21b6b) (BuildId: f5955df196676c33) #6 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe21b6b) #7 __invoke<std::__2::function<void ()> > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21b6b) #8 __execute<> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1835:12 (clang-doc+0xe21b6b) #9 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1829:12 (clang-doc+0xe21b6b) #10 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::__execute() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:811:5 (clang-doc+0xe21b6b) #11 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33) #12 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac) #13 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac) #14 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac) #15 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac) #16 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac) #17 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33) #18 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb) #19 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb) #20 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33) #21 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62) #22 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62) #23 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62) #24 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62) #25 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62) #26 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62) Mutex M0 (0x7ffff2d57458) created at: #0 pthread_mutex_init ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1316:3 (clang-doc+0xd984d3) (BuildId: f5955df196676c33) #1 std::__2::__libcpp_recursive_mutex_init[abi:ne190000](pthread_mutex_t*) /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include/c++/v1/__thread/support/pthread.h:62:10 (clang-doc+0x3557dcb) (BuildId: f5955df196676c33) #2 std::__2::recursive_mutex::recursive_mutex() ../../../../../../llvm-llvm-project/libcxx/src/mutex.cpp:46:12 (clang-doc+0x3557dcb) #3 __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16 (libc.so.6+0x276c9) (BuildId: b830dcb9c6f0ee1f8679364e0f99ce35db953847) Thread T142 'llvm-worker-45' (tid=344839, running) created by main thread at: #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1023:3 (clang-doc+0xd96b21) (BuildId: f5955df196676c33) #1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::__2::optional<unsigned int>) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/Unix/Threading.inc:85:17 (clang-doc+0xeed185) (BuildId: f5955df196676c33) #2 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:131:12 (clang-doc+0xe80d58) (BuildId: f5955df196676c33) #3 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:78:9 (clang-doc+0xe80d58) #4 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator.h:166:24 (clang-doc+0xe80d58) #5 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26), 0> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator_traits.h:319:9 (clang-doc+0xe80d58) #6 __construct_one_at_end<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:896:5 (clang-doc+0xe80d58) #7 emplace_back<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:1519:5 (clang-doc+0xe80d58) #8 llvm::StdThreadPool::grow(int) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:13 (clang-doc+0xe80d58) #9 llvm::StdThreadPool::asyncEnqueue(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:178:5 (clang-doc+0xe82a81) (BuildId: f5955df196676c33) #10 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:5 (clang-doc+0xe21981) (BuildId: f5955df196676c33) #11 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33) #12 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa) SUMMARY: ThreadSanitizer: data race /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 in main ================== ================== WARNING: ThreadSanitizer: data race (pid=240066) Write of size 8 at 0x722800405e60 by main thread: #0 pthread_cond_destroy ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1304:3 (clang-doc+0xd98330) (BuildId: f5955df196676c33) #1 ~__assoc_sub_state /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:507:33 (clang-doc+0xe21b0e) (BuildId: f5955df196676c33) #2 ~__deferred_assoc_state /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21b0e) #3 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::~__deferred_assoc_state() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21b0e) #4 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 (clang-doc+0xe1c52c) (BuildId: f5955df196676c33) Previous read of size 8 at 0x722800405e60 by thread T142 (mutexes: write M0): #0 pthread_cond_broadcast ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1297:3 (clang-doc+0xd9818f) (BuildId: f5955df196676c33) #1 std::__2::__assoc_sub_state::set_value() ../../../../../../llvm-llvm-project/libcxx/src/future.cpp:67:9 (clang-doc+0x3557abb) (BuildId: f5955df196676c33) #2 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33) #3 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac) #4 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac) #5 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac) #6 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac) #7 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac) #8 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33) #9 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb) #10 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb) #11 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33) #12 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62) #13 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62) #14 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62) #15 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62) #16 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62) #17 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62) Location is heap block of size 152 at 0x722800405e20 allocated by main thread: #0 operator new(unsigned long) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:64:3 (clang-doc+0xe17482) (BuildId: f5955df196676c33) #1 __make_deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()> > > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1801:7 (clang-doc+0xe217ef) (BuildId: f5955df196676c33) #2 async<std::__2::function<void ()> > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1863:12 (clang-doc+0xe217ef) #3 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:113:19 (clang-doc+0xe217ef) #4 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33) #5 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa) Mutex M0 (0x722800405e38) created at: #0 pthread_mutex_lock ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1342:3 (clang-doc+0xd9880e) (BuildId: f5955df196676c33) #1 std::__2::__libcpp_mutex_lock[abi:ne190000](pthread_mutex_t*) /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include/c++/v1/__thread/support/pthread.h:95:10 (clang-doc+0x3557d65) (BuildId: f5955df196676c33) #2 std::__2::mutex::lock() ../../../../../../llvm-llvm-project/libcxx/src/mutex.cpp:29:12 (clang-doc+0x3557d65) #3 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33) #4 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa) Thread T142 'llvm-worker-45' (tid=344839, running) created by main thread at: #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1023:3 (clang-doc+0xd96b21) (BuildId: f5955df196676c33) #1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::__2::optional<unsigned int>) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/Unix/Threading.inc:85:17 (clang-doc+0xeed185) (BuildId: f5955df196676c33) #2 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:131:12 (clang-doc+0xe80d58) (BuildId: f5955df196676c33) #3 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:78:9 (clang-doc+0xe80d58) #4 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator.h:166:24 (clang-doc+0xe80d58) #5 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26), 0> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator_traits.h:319:9 (clang-doc+0xe80d58) #6 __construct_one_at_end<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:896:5 (clang-doc+0xe80d58) #7 emplace_back<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:1519:5 (clang-doc+0xe80d58) #8 llvm::StdThreadPool::grow(int) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:13 (clang-doc+0xe80d58) #9 llvm::StdThreadPool::asyncEnqueue(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:178:5 (clang-doc+0xe82a81) (BuildId: f5955df196676c33) #10 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:5 (clang-doc+0xe21981) (BuildId: f5955df196676c33) #11 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33) #12 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa) SUMMARY: ThreadSanitizer: data race /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 in main ================== ================== WARNING: ThreadSanitizer: data race (pid=240066) Write of size 8 at 0x722800405e38 by main thread: #0 operator delete(void*) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:126:3 (clang-doc+0xe17c18) (BuildId: f5955df196676c33) #1 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::~__deferred_assoc_state() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:760:7 (clang-doc+0xe21b27) (BuildId: f5955df196676c33) #2 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 (clang-doc+0xe1c52c) (BuildId: f5955df196676c33) Previous atomic read of size 1 at 0x722800405e38 by thread T142: #0 pthread_mutex_lock ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1342:3 (clang-doc+0xd9880e) (BuildId: f5955df196676c33) #1 std::__2::__libcpp_mutex_lock[abi:ne190000](pthread_mutex_t*) /b/s/w/ir/x/w/llvm_build/tools/clang/stage2-bins/include/c++/v1/__thread/support/pthread.h:95:10 (clang-doc+0x3557d65) (BuildId: f5955df196676c33) #2 std::__2::mutex::lock() ../../../../../../llvm-llvm-project/libcxx/src/mutex.cpp:29:12 (clang-doc+0x3557d65) #3 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33) #4 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac) #5 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac) #6 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac) #7 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac) #8 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac) #9 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33) #10 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb) #11 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb) #12 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33) #13 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62) #14 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62) #15 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62) #16 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62) #17 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62) #18 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62) Thread T142 'llvm-worker-45' (tid=344839, running) created by main thread at: #0 pthread_create ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1023:3 (clang-doc+0xd96b21) (BuildId: f5955df196676c33) #1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::__2::optional<unsigned int>) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/Unix/Threading.inc:85:17 (clang-doc+0xeed185) (BuildId: f5955df196676c33) #2 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:131:12 (clang-doc+0xe80d58) (BuildId: f5955df196676c33) #3 thread<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:78:9 (clang-doc+0xe80d58) #4 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator.h:166:24 (clang-doc+0xe80d58) #5 construct<llvm::thread, (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26), 0> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/allocator_traits.h:319:9 (clang-doc+0xe80d58) #6 __construct_one_at_end<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:896:5 (clang-doc+0xe80d58) #7 emplace_back<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/vector:1519:5 (clang-doc+0xe80d58) #8 llvm::StdThreadPool::grow(int) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:13 (clang-doc+0xe80d58) #9 llvm::StdThreadPool::asyncEnqueue(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:178:5 (clang-doc+0xe82a81) (BuildId: f5955df196676c33) #10 std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:5 (clang-doc+0xe21981) (BuildId: f5955df196676c33) #11 async<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16)> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:96:12 (clang-doc+0xe1c4fa) (BuildId: f5955df196676c33) #12 main /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:10 (clang-doc+0xe1c4fa) SUMMARY: ThreadSanitizer: data race /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:5 in main ================== ThreadSanitizer: Out of memory. The process has exhausted 16384MB for size class 6144. ==240066==ERROR: ThreadSanitizer: out of memory: allocator is trying to allocate 0x1588 bytes #0 operator new(unsigned long) ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cpp:64:3 (clang-doc+0xe17482) (BuildId: f5955df196676c33) #1 make_unique<clang::doc::RecordInfo> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__memory/unique_ptr.h:620:26 (clang-doc+0x192050c) (BuildId: f5955df196676c33) #2 llvm::Expected<std::__2::unique_ptr<clang::doc::Info, std::__2::default_delete<clang::doc::Info>>> clang::doc::ClangDocBitcodeReader::createInfo<clang::doc::RecordInfo>(unsigned int) /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:897:29 (clang-doc+0x192050c) #3 clang::doc::ClangDocBitcodeReader::readBlockToInfo(unsigned int) /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:909:12 (clang-doc+0x192033f) (BuildId: f5955df196676c33) #4 clang::doc::ClangDocBitcodeReader::readBitcode() /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:955:24 (clang-doc+0x1921538) (BuildId: f5955df196676c33) #5 operator() /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:249:33 (clang-doc+0xe21d9f) (BuildId: f5955df196676c33) #6 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21d9f) #7 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp:243:16) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21d9f) #8 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21d9f) #9 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<main::$_1, void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21d9f) #10 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe21b6b) (BuildId: f5955df196676c33) #11 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe21b6b) #12 __invoke<std::__2::function<void ()> > /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21b6b) #13 __execute<> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1835:12 (clang-doc+0xe21b6b) #14 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:1829:12 (clang-doc+0xe21b6b) #15 std::__2::__deferred_assoc_state<void, std::__2::__async_func<std::__2::function<void ()>>>::__execute() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:811:5 (clang-doc+0xe21b6b) #16 wait /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/future:2019:55 (clang-doc+0xe21bac) (BuildId: f5955df196676c33) #17 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:38 (clang-doc+0xe21bac) #18 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe21bac) #19 __call<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/ThreadPool.h:114:18) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:225:5 (clang-doc+0xe21bac) #20 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:211:12 (clang-doc+0xe21bac) #21 void std::__2::__function::__policy_invoker<void ()>::__call_impl[abi:nn190000]<std::__2::__function::__default_alloc_func<std::__2::shared_future<void> llvm::ThreadPoolInterface::asyncImpl<void>(std::__2::function<void ()>, llvm::ThreadPoolTaskGroup*)::'lambda'(), void ()>>(std::__2::__function::__policy_storage const*) /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:611:12 (clang-doc+0xe21bac) #22 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:717:12 (clang-doc+0xe819eb) (BuildId: f5955df196676c33) #23 operator() /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__functional/function.h:990:10 (clang-doc+0xe819eb) #24 llvm::StdThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:100:5 (clang-doc+0xe819eb) #25 operator() /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:48:7 (clang-doc+0xe83e62) (BuildId: f5955df196676c33) #26 operator()<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:43:11 (clang-doc+0xe83e62) #27 __invoke<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), (lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26) &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/__type_traits/invoke.h:150:25 (clang-doc+0xe83e62) #28 __apply_tuple_impl<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &, 0UL> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1360:5 (clang-doc+0xe83e62) #29 apply<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:42:9), std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> &> /usr/local/google/home/paulkirth/fuchsia/prebuilt/third_party/clang/linux-x64/bin/../include/c++/v1/tuple:1364:5 (clang-doc+0xe83e62) #30 GenericThreadProxy<std::__2::tuple<(lambda at /usr/local/google/home/paulkirth/llvm-project/llvm/lib/Support/ThreadPool.cpp:45:26)> > /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:41:5 (clang-doc+0xe83e62) #31 void* llvm::thread::ThreadProxy<std::__2::tuple<llvm::StdThreadPool::grow(int)::$_0>>(void*) /usr/local/google/home/paulkirth/llvm-project/llvm/include/llvm/Support/thread.h:55:5 (clang-doc+0xe83e62) #32 __tsan_thread_start_func ../../../../../../llvm-llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1013:15 (clang-doc+0xd96a67) (BuildId: f5955df196676c33) ==240066==HINT: if you don't care about these errors you may set allocator_may_return_null=1 SUMMARY: ThreadSanitizer: out-of-memory /usr/local/google/home/paulkirth/llvm-project/clang-tools-extra/clang-doc/BitcodeReader.cpp:897:29 in llvm::Expected<std::__2::unique_ptr<clang::doc::Info, std::__2::default_delete<clang::doc::Info>>> clang::doc::ClangDocBitcodeReader::createInfo<clang::doc::RecordInfo>(unsigned int) ==240066==ERROR: ThreadSanitizer: out of memory: allocator is trying to allocate 0x1588 bytes ``` I haven't run this down yet, but it seems like we're probably missing a mutex somewhere in Clang-Doc's main loop from a cursory glance. CC: @petrhosek @PeterChou1
ilovepi commented 3 months ago

After looking, I think it could just be a missing lock_guard when iterating over USRToBitcode, which we use a lock for elsewhere. I think the assumption was that the outer loop would finish before the guard would ever be acquired. I'm trying again w/ that change to see, but it will take ~8 hours to find out based on my experience last time.