Open
Description
While trying to debug #96734, I built LLVM with -fsanitize=thread
, and virtually all ThinLTO tests failed with many dozens of TSan 'data race' errors, which looked very similar to this example:
==================
WARNING: ThreadSanitizer: data race (pid=53312)
Atomic write of size 4 at 0x3ffff6d803c8 by thread T2:
#0 llvm::sys::CompareAndSwap(unsigned int volatile*, unsigned int, unsigned int) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/Atomic.cpp:53 (libLLVM.so.18.1+0xe486ac) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#1 void llvm::call_once<void* (&)(llvm::PassRegistry&), std::reference_wrapper<llvm::PassRegistry> >(llvm::once_flag&, void* (&)(llvm::PassRegistry&), std::reference_wrapper<llvm::PassRegistry>&&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/Threading.h:94 (libLLVM.so.18.1+0x18a7ac8) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#2 llvm::initializeMachineDominatorTreePass(llvm::PassRegistry&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/MachineDominators.cpp:44 (libLLVM.so.18.1+0x18a7ac8)
#3 llvm::initializeCodeGen(llvm::PassRegistry&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/CodeGen.cpp:82 (libLLVM.so.18.1+0x15089c8) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#4 llvm::TargetPassConfig::TargetPassConfig(llvm::LLVMTargetMachine&, llvm::legacy::PassManagerBase&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/TargetPassConfig.cpp:577 (libLLVM.so.18.1+0x1ee68e4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#5 X86PassConfig /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Target/X86/X86TargetMachine.cpp:371 (libLLVM.so.18.1+0x8c9a7cc) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#6 llvm::X86TargetMachine::createPassConfig(llvm::legacy::PassManagerBase&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Target/X86/X86TargetMachine.cpp:430 (libLLVM.so.18.1+0x8c9a7cc)
#7 addPassesToGenerateCode /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/LLVMTargetMachine.cpp:121 (libLLVM.so.18.1+0x17a06c4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#8 llvm::LLVMTargetMachine::addPassesToEmitFile(llvm::legacy::PassManagerBase&, llvm::raw_pwrite_stream&, llvm::raw_pwrite_stream*, llvm::CodeGenFileType, bool, llvm::MachineModuleInfoWrapperPass*) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/LLVMTargetMachine.cpp:241 (libLLVM.so.18.1+0x17aa9b4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#9 codegen /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTOBackend.cpp:418 (libLLVM.so.18.1+0x4b55f74) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#10 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTOBackend.cpp:593 (libLLVM.so.18.1+0x4b590dc) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#11 llvm::lto::thinBackend(llvm::lto::Config const&, unsigned int, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)>, llvm::Module&, llvm::ModuleSummaryIndex const&, llvm::DenseMap<llvm::StringRef, std::unordered_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> > > > const&, llvm::DenseMap<unsigned long, llvm::GlobalValueSummary*, llvm::DenseMapInfo<unsigned long, void>, llvm::detail::DenseMapPair<unsigned long, llvm::GlobalValueSummary*> > const&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0u> >*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTOBackend.cpp:668 (libLLVM.so.18.1+0x4b590dc)
#12 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1457 (libLLVM.so.18.1+0x4b3c5a0) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#13 runThinLTOBackendThread /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1472 (libLLVM.so.18.1+0x4b3c5a0)
#14 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1512 (libLLVM.so.18.1+0x4b3c5a0)
#15 __invoke_impl<void, (anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>&, llvm::BitcodeModule&, llvm::ModuleSummaryIndex&, const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> > > >&, const llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> >&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes, std::less<long unsigned int>, std::allocator<std::pair<long unsigned int const, llvm::GlobalValue::LinkageTypes> > >&, const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*, llvm::DenseMapInfo<long unsigned int, void>, llvm::detail::DenseMapPair<long unsigned int, llvm::GlobalValueSummary*> >&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0> >&> /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0x4b3c5a0)
#16 __invoke<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>&, llvm::BitcodeModule&, llvm::ModuleSummaryIndex&, const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> > > >&, const llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> >&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes, std::less<long unsigned int>, std::allocator<std::pair<long unsigned int const, llvm::GlobalValue::LinkageTypes> > >&, const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*, llvm::DenseMapInfo<long unsigned int, void>, llvm::detail::DenseMapPair<long unsigned int, llvm::GlobalValueSummary*> >&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0> >&> /usr/include/c++/13.3.0/bits/invoke.h:96 (libLLVM.so.18.1+0x4b3c5a0)
#17 __call<void, 0, 1, 2, 3, 4, 5, 6> /usr/include/c++/13.3.0/functional:506 (libLLVM.so.18.1+0x4b3c5a0)
#18 operator()<> /usr/include/c++/13.3.0/functional:591 (libLLVM.so.18.1+0x4b3c5a0)
#19 __invoke_impl<void, std::_Bind<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>(llvm::BitcodeModule, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int> > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo> >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes> >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*> >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule> >)>&> /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0x4b3c5a0)
#20 __invoke_r<void, std::_Bind<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>(llvm::BitcodeModule, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int> > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo> >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes> >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*> >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule> >)>&> /usr/include/c++/13.3.0/bits/invoke.h:111 (libLLVM.so.18.1+0x4b3c5a0)
#21 _M_invoke /usr/include/c++/13.3.0/bits/std_function.h:290 (libLLVM.so.18.1+0x4b3c5a0)
#22 std::function<void ()>::operator()() const /usr/include/c++/13.3.0/bits/std_function.h:591 (libLLVM.so.18.1+0xc00c0c) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#23 llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}::operator()() const /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:135 (libLLVM.so.18.1+0xc00c0c)
#24 void std::__invoke_impl<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&>(std::__invoke_other, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&) /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0xc00c0c)
#25 std::enable_if<is_invocable_r_v<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&>, void>::type std::__invoke_r<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&>(llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&) /usr/include/c++/13.3.0/bits/invoke.h:111 (libLLVM.so.18.1+0xc00c0c)
#26 std::_Function_handler<void (), llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}>::_M_invoke(std::_Any_data const&) /usr/include/c++/13.3.0/bits/std_function.h:290 (libLLVM.so.18.1+0xc00c0c)
#27 std::function<void ()>::operator()() const /usr/include/c++/13.3.0/bits/std_function.h:591 (libLLVM.so.18.1+0xd86b4c) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#28 llvm::ThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/ThreadPool.cpp:101 (libLLVM.so.18.1+0xd86b4c)
#29 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/ThreadPool.cpp:49 (libLLVM.so.18.1+0xd87f10) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#30 operator()<llvm::ThreadPool::grow(int)::<lambda()>&> /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:43 (libLLVM.so.18.1+0xd87f10)
#31 __invoke_impl<void, llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, llvm::ThreadPool::grow(int)::<lambda()>&> /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0xd87f10)
#32 __invoke<llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, llvm::ThreadPool::grow(int)::<lambda()>&> /usr/include/c++/13.3.0/bits/invoke.h:96 (libLLVM.so.18.1+0xd87f10)
#33 __apply_impl<llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, std::tuple<llvm::ThreadPool::grow(int)::<lambda()> >&, 0> /usr/include/c++/13.3.0/tuple:2302 (libLLVM.so.18.1+0xd87f10)
#34 apply<llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, std::tuple<llvm::ThreadPool::grow(int)::<lambda()> >&> /usr/include/c++/13.3.0/tuple:2313 (libLLVM.so.18.1+0xd87f10)
#35 GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:41 (libLLVM.so.18.1+0xd87f10)
#36 ThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:55 (libLLVM.so.18.1+0xd87f10)
Previous read of size 4 at 0x3ffff6d803c8 by thread T1:
#0 void llvm::call_once<void* (&)(llvm::PassRegistry&), std::reference_wrapper<llvm::PassRegistry> >(llvm::once_flag&, void* (&)(llvm::PassRegistry&), std::reference_wrapper<llvm::PassRegistry>&&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/Threading.h:104 (libLLVM.so.18.1+0x18a8154) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#1 llvm::initializeMachineDominatorTreePass(llvm::PassRegistry&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/MachineDominators.cpp:44 (libLLVM.so.18.1+0x18a8154)
#2 llvm::MachineDominatorTree::MachineDominatorTree() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/MachineDominators.cpp:68 (libLLVM.so.18.1+0x18a8154)
#3 std::__detail::_MakeUniq<llvm::MachineDominatorTree>::__single_object std::make_unique<llvm::MachineDominatorTree>() /usr/include/c++/13.3.0/bits/unique_ptr.h:1070 (libLLVM.so.18.1+0x16e76f4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#4 llvm::LazyMachineBlockFrequencyInfoPass::calculateIfNotAvailable() const /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/LazyMachineBlockFrequencyInfo.cpp:78 (libLLVM.so.18.1+0x16e76f4)
#5 llvm::LazyMachineBlockFrequencyInfoPass::getBFI() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/CodeGen/LazyMachineBlockFrequencyInfo.h:61 (libLLVM.so.18.1+0x8846860) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#6 runOnMachineFunction /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Target/X86/X86FixupLEAs.cpp:238 (libLLVM.so.18.1+0x8846860)
#7 runOnMachineFunction /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Target/X86/X86FixupLEAs.cpp:221 (libLLVM.so.18.1+0x8846860)
#8 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/MachineFunctionPass.cpp:93 (libLLVM.so.18.1+0x18e68a4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#9 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/CodeGen/MachineFunctionPass.cpp:42 (libLLVM.so.18.1+0x18e83a4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#10 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/IR/LegacyPassManager.cpp:1443 (libLLVM.so.18.1+0x11e8c18) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#11 llvm::FPPassManager::runOnModule(llvm::Module&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/IR/LegacyPassManager.cpp:1489 (libLLVM.so.18.1+0x11e9330) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#12 runOnModule /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/IR/LegacyPassManager.cpp:1558 (libLLVM.so.18.1+0x11eaae4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#13 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/IR/LegacyPassManager.cpp:541 (libLLVM.so.18.1+0x11eaae4)
#14 llvm::legacy::PassManager::run(llvm::Module&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/IR/LegacyPassManager.cpp:1685 (libLLVM.so.18.1+0x11eb334) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#15 codegen /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTOBackend.cpp:422 (libLLVM.so.18.1+0x4b55f8c) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#16 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTOBackend.cpp:593 (libLLVM.so.18.1+0x4b590dc) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#17 llvm::lto::thinBackend(llvm::lto::Config const&, unsigned int, std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)>, llvm::Module&, llvm::ModuleSummaryIndex const&, llvm::DenseMap<llvm::StringRef, std::unordered_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<unsigned long, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<unsigned long> > > > const&, llvm::DenseMap<unsigned long, llvm::GlobalValueSummary*, llvm::DenseMapInfo<unsigned long, void>, llvm::detail::DenseMapPair<unsigned long, llvm::GlobalValueSummary*> > const&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0u> >*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTOBackend.cpp:668 (libLLVM.so.18.1+0x4b590dc)
#18 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1457 (libLLVM.so.18.1+0x4b3c5a0) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#19 runThinLTOBackendThread /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1472 (libLLVM.so.18.1+0x4b3c5a0)
#20 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1512 (libLLVM.so.18.1+0x4b3c5a0)
#21 __invoke_impl<void, (anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>&, llvm::BitcodeModule&, llvm::ModuleSummaryIndex&, const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> > > >&, const llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> >&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes, std::less<long unsigned int>, std::allocator<std::pair<long unsigned int const, llvm::GlobalValue::LinkageTypes> > >&, const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*, llvm::DenseMapInfo<long unsigned int, void>, llvm::detail::DenseMapPair<long unsigned int, llvm::GlobalValueSummary*> >&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0> >&> /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0x4b3c5a0)
#22 __invoke<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>&, llvm::BitcodeModule&, llvm::ModuleSummaryIndex&, const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> > > >&, const llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> >&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes, std::less<long unsigned int>, std::allocator<std::pair<long unsigned int const, llvm::GlobalValue::LinkageTypes> > >&, const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*, llvm::DenseMapInfo<long unsigned int, void>, llvm::detail::DenseMapPair<long unsigned int, llvm::GlobalValueSummary*> >&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0> >&> /usr/include/c++/13.3.0/bits/invoke.h:96 (libLLVM.so.18.1+0x4b3c5a0)
#23 __call<void, 0, 1, 2, 3, 4, 5, 6> /usr/include/c++/13.3.0/functional:506 (libLLVM.so.18.1+0x4b3c5a0)
#24 operator()<> /usr/include/c++/13.3.0/functional:591 (libLLVM.so.18.1+0x4b3c5a0)
#25 __invoke_impl<void, std::_Bind<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>(llvm::BitcodeModule, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int> > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo> >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes> >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*> >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule> >)>&> /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0x4b3c5a0)
#26 __invoke_r<void, std::_Bind<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>(llvm::BitcodeModule, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int> > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo> >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes> >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*> >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule> >)>&> /usr/include/c++/13.3.0/bits/invoke.h:111 (libLLVM.so.18.1+0x4b3c5a0)
#27 _M_invoke /usr/include/c++/13.3.0/bits/std_function.h:290 (libLLVM.so.18.1+0x4b3c5a0)
#28 std::function<void ()>::operator()() const /usr/include/c++/13.3.0/bits/std_function.h:591 (libLLVM.so.18.1+0xc00c0c) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#29 llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}::operator()() const /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:135 (libLLVM.so.18.1+0xc00c0c)
#30 void std::__invoke_impl<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&>(std::__invoke_other, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&) /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0xc00c0c)
#31 std::enable_if<is_invocable_r_v<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&>, void>::type std::__invoke_r<void, llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&>(llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}&) /usr/include/c++/13.3.0/bits/invoke.h:111 (libLLVM.so.18.1+0xc00c0c)
#32 std::_Function_handler<void (), llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}>::_M_invoke(std::_Any_data const&) /usr/include/c++/13.3.0/bits/std_function.h:290 (libLLVM.so.18.1+0xc00c0c)
#33 std::function<void ()>::operator()() const /usr/include/c++/13.3.0/bits/std_function.h:591 (libLLVM.so.18.1+0xd86b4c) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#34 llvm::ThreadPool::processTasks(llvm::ThreadPoolTaskGroup*) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/ThreadPool.cpp:101 (libLLVM.so.18.1+0xd86b4c)
#35 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/ThreadPool.cpp:49 (libLLVM.so.18.1+0xd87f10) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#36 operator()<llvm::ThreadPool::grow(int)::<lambda()>&> /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:43 (libLLVM.so.18.1+0xd87f10)
#37 __invoke_impl<void, llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, llvm::ThreadPool::grow(int)::<lambda()>&> /usr/include/c++/13.3.0/bits/invoke.h:61 (libLLVM.so.18.1+0xd87f10)
#38 __invoke<llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, llvm::ThreadPool::grow(int)::<lambda()>&> /usr/include/c++/13.3.0/bits/invoke.h:96 (libLLVM.so.18.1+0xd87f10)
#39 __apply_impl<llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, std::tuple<llvm::ThreadPool::grow(int)::<lambda()> >&, 0> /usr/include/c++/13.3.0/tuple:2302 (libLLVM.so.18.1+0xd87f10)
#40 apply<llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > >(void*)::<lambda(auto:4&&, auto:5&& ...)>, std::tuple<llvm::ThreadPool::grow(int)::<lambda()> >&> /usr/include/c++/13.3.0/tuple:2313 (libLLVM.so.18.1+0xd87f10)
#41 GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:41 (libLLVM.so.18.1+0xd87f10)
#42 ThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::<lambda()> > > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:55 (libLLVM.so.18.1+0xd87f10)
Location is global 'InitializeMachineDominatorTreePassFlag' of size 4 at 0x3ffff6d803c8 (libLLVM.so.18.1+0xc51a3c8)
Thread T2 (tid=53396, running) created by main thread at:
#0 pthread_create /home/awilcox/Code/awilfox/gcc-next/system/gcc/src/gcc-13.3.0/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x3c4d0) (BuildId: c92845fc2f2f0f482ba79571bf8c69c18ab12adb)
#1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::optional<unsigned int>) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/Unix/Threading.inc:85 (libLLVM.so.18.1+0xe7f3c0) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#2 thread<llvm::ThreadPool::grow(int)::<lambda()>&> /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:131 (libLLVM.so.18.1+0xd861dc) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#3 thread<llvm::ThreadPool::grow(int)::<lambda()> > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:78 (libLLVM.so.18.1+0xd861dc)
#4 construct<llvm::thread, llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/new_allocator.h:191 (libLLVM.so.18.1+0xd861dc)
#5 construct<llvm::thread, llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/alloc_traits.h:538 (libLLVM.so.18.1+0xd861dc)
#6 _M_realloc_insert<llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/vector.tcc:468 (libLLVM.so.18.1+0xd861dc)
#7 emplace_back<llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/vector.tcc:123 (libLLVM.so.18.1+0xd861dc)
#8 llvm::ThreadPool::grow(int) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/ThreadPool.cpp:46 (libLLVM.so.18.1+0xd861dc)
#9 std::shared_future<void> llvm::ThreadPool::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:167 (libLLVM.so.18.1+0xc162f8) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#10 async<std::_Bind<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>(llvm::BitcodeModule, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int> > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo> >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes> >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*> >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule> >)> > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:85 (libLLVM.so.18.1+0x4b2f364) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#11 async<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>, llvm::BitcodeModule&, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> > > > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> > >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes, std::less<long unsigned int>, std::allocator<std::pair<long unsigned int const, llvm::GlobalValue::LinkageTypes> > > >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*, llvm::DenseMapInfo<long unsigned int, void>, llvm::detail::DenseMapPair<long unsigned int, llvm::GlobalValueSummary*> > >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0> > > > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:69 (libLLVM.so.18.1+0x4b2f364)
#12 start /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1499 (libLLVM.so.18.1+0x4b2f364)
#13 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1827 (libLLVM.so.18.1+0x4b33928) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#14 llvm::lto::LTO::runThinLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)> > (unsigned int, llvm::StringRef, llvm::Twine const&)>, llvm::DenseSet<unsigned long, llvm::DenseMapInfo<unsigned long, void> > const&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1848 (libLLVM.so.18.1+0x4b36d04) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#15 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)> > (unsigned int, llvm::StringRef, llvm::Twine const&)>) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1176 (libLLVM.so.18.1+0x4b421e4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#16 run /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/tools/llvm-lto2/llvm-lto2.cpp:436 (llvm-lto2+0x29c14) (BuildId: 5961eacb5a77065ebafddaad2256fe568af3ce49)
#17 main /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/tools/llvm-lto2/llvm-lto2.cpp:558 (llvm-lto2+0x12528) (BuildId: 5961eacb5a77065ebafddaad2256fe568af3ce49)
Thread T1 (tid=53395, running) created by main thread at:
#0 pthread_create /home/awilcox/Code/awilfox/gcc-next/system/gcc/src/gcc-13.3.0/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x3c4d0) (BuildId: c92845fc2f2f0f482ba79571bf8c69c18ab12adb)
#1 llvm::llvm_execute_on_thread_impl(void* (*)(void*), void*, std::optional<unsigned int>) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/Unix/Threading.inc:85 (libLLVM.so.18.1+0xe7f3c0) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#2 thread<llvm::ThreadPool::grow(int)::<lambda()>&> /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:131 (libLLVM.so.18.1+0xd861dc) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#3 thread<llvm::ThreadPool::grow(int)::<lambda()> > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/thread.h:78 (libLLVM.so.18.1+0xd861dc)
#4 construct<llvm::thread, llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/new_allocator.h:191 (libLLVM.so.18.1+0xd861dc)
#5 construct<llvm::thread, llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/alloc_traits.h:538 (libLLVM.so.18.1+0xd861dc)
#6 _M_realloc_insert<llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/vector.tcc:468 (libLLVM.so.18.1+0xd861dc)
#7 emplace_back<llvm::ThreadPool::grow(int)::<lambda()> > /usr/include/c++/13.3.0/bits/vector.tcc:123 (libLLVM.so.18.1+0xd861dc)
#8 llvm::ThreadPool::grow(int) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/ThreadPool.cpp:46 (libLLVM.so.18.1+0xd861dc)
#9 std::shared_future<void> llvm::ThreadPool::asyncImpl<void>(std::function<void ()>, llvm::ThreadPoolTaskGroup*) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:167 (libLLVM.so.18.1+0xc162f8) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#10 async<std::_Bind<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>(llvm::BitcodeModule, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int> > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo> >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes> >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*> >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule> >)> > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:85 (libLLVM.so.18.1+0x4b2f364) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#11 async<(anonymous namespace)::InProcessThinBackend::start(unsigned int, llvm::BitcodeModule, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)::<lambda(llvm::BitcodeModule, llvm::ModuleSummaryIndex&, const llvm::FunctionImporter::ImportMapTy&, const llvm::FunctionImporter::ExportSetTy&, const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes>&, const llvm::GVSummaryMapTy&, llvm::MapVector<llvm::StringRef, llvm::BitcodeModule>&)>, llvm::BitcodeModule&, std::reference_wrapper<llvm::ModuleSummaryIndex>, std::reference_wrapper<const llvm::DenseMap<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> >, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, std::unordered_set<long unsigned int, std::hash<long unsigned int>, std::equal_to<long unsigned int>, std::allocator<long unsigned int> > > > >, std::reference_wrapper<const llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void> > >, std::reference_wrapper<const std::map<long unsigned int, llvm::GlobalValue::LinkageTypes, std::less<long unsigned int>, std::allocator<std::pair<long unsigned int const, llvm::GlobalValue::LinkageTypes> > > >, std::reference_wrapper<const llvm::DenseMap<long unsigned int, llvm::GlobalValueSummary*, llvm::DenseMapInfo<long unsigned int, void>, llvm::detail::DenseMapPair<long unsigned int, llvm::GlobalValueSummary*> > >, std::reference_wrapper<llvm::MapVector<llvm::StringRef, llvm::BitcodeModule, llvm::DenseMap<llvm::StringRef, unsigned int, llvm::DenseMapInfo<llvm::StringRef, void>, llvm::detail::DenseMapPair<llvm::StringRef, unsigned int> >, llvm::SmallVector<std::pair<llvm::StringRef, llvm::BitcodeModule>, 0> > > > /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/include/llvm/Support/ThreadPool.h:69 (libLLVM.so.18.1+0x4b2f364)
#12 start /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1499 (libLLVM.so.18.1+0x4b2f364)
#13 operator() /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1827 (libLLVM.so.18.1+0x4b33928) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#14 llvm::lto::LTO::runThinLTO(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)> > (unsigned int, llvm::StringRef, llvm::Twine const&)>, llvm::DenseSet<unsigned long, llvm::DenseMapInfo<unsigned long, void> > const&) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1848 (libLLVM.so.18.1+0x4b36d04) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#15 llvm::lto::LTO::run(std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)>, std::function<llvm::Expected<std::function<llvm::Expected<std::unique_ptr<llvm::CachedFileStream, std::default_delete<llvm::CachedFileStream> > > (unsigned int, llvm::Twine const&)> > (unsigned int, llvm::StringRef, llvm::Twine const&)>) /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/LTO/LTO.cpp:1176 (libLLVM.so.18.1+0x4b421e4) (BuildId: 1076afea7ca68c706bc2b8fcbf5d4f3464cf445a)
#16 run /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/tools/llvm-lto2/llvm-lto2.cpp:436 (llvm-lto2+0x29c14) (BuildId: 5961eacb5a77065ebafddaad2256fe568af3ce49)
#17 main /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/tools/llvm-lto2/llvm-lto2.cpp:558 (llvm-lto2+0x12528) (BuildId: 5961eacb5a77065ebafddaad2256fe568af3ce49)
SUMMARY: ThreadSanitizer: data race /home/awilcox/Code/awilfox/rust-next/user/llvm18/src/llvm-project-18.1.8.src/llvm/lib/Support/Atomic.cpp:53 in llvm::sys::CompareAndSwap(unsigned int volatile*, unsigned int, unsigned int)
==================
These are the tests that failed with these errors:
LLVM :: LTO/Resolution/X86/dead-strip-alias.ll
LLVM :: LTO/Resolution/X86/lto-unit-check.ll
LLVM :: LTO/Resolution/X86/not-prevailing.ll
LLVM :: ThinLTO/X86/alias_internal.ll
LLVM :: ThinLTO/X86/asm.ll
LLVM :: ThinLTO/X86/cache-decoupled-from-filenames.ll
LLVM :: ThinLTO/X86/cache-decoupled-from-order.ll
LLVM :: ThinLTO/X86/cache-icall.ll
LLVM :: ThinLTO/X86/cache-import-lists.ll
LLVM :: ThinLTO/X86/cache-typeid-resolutions.ll
LLVM :: ThinLTO/X86/cache.ll
LLVM :: ThinLTO/X86/callees-metadata.ll
LLVM :: ThinLTO/X86/check_var_import_odr.ll
LLVM :: ThinLTO/X86/ctor-dtor-alias.ll
LLVM :: ThinLTO/X86/ctor-dtor-alias2.ll
LLVM :: ThinLTO/X86/debuginfo-compositetype-import.ll
LLVM :: ThinLTO/X86/devirt2.ll
LLVM :: ThinLTO/X86/devirt_after_filtering_unreachable.ll
LLVM :: ThinLTO/X86/devirt_alias.ll
LLVM :: ThinLTO/X86/devirt_available_externally.ll
LLVM :: ThinLTO/X86/devirt_external_comdat_same_guid.ll
LLVM :: ThinLTO/X86/devirt_local_same_guid.ll
LLVM :: ThinLTO/X86/devirt_promote.ll
LLVM :: ThinLTO/X86/devirt_promote_legacy.ll
LLVM :: ThinLTO/X86/devirt_single_hybrid.ll
LLVM :: ThinLTO/X86/diagnostic-handler-remarks-with-hotness.ll
LLVM :: ThinLTO/X86/diagnostic-handler-remarks.ll
LLVM :: ThinLTO/X86/dicompositetype-unique-alias.ll
LLVM :: ThinLTO/X86/dicompositetype-unique.ll
LLVM :: ThinLTO/X86/dicompositetype-unique2.ll
LLVM :: ThinLTO/X86/dot-dumper.ll
LLVM :: ThinLTO/X86/dot-dumper2.ll
LLVM :: ThinLTO/X86/dsolocal_dllimport.ll
LLVM :: ThinLTO/X86/emit-inprocess-files.ll
LLVM :: ThinLTO/X86/empty_module_with_cache.ll
LLVM :: ThinLTO/X86/funcattrs-prop-exported-internal.ll
LLVM :: ThinLTO/X86/funcattrs-prop-maythrow.ll
LLVM :: ThinLTO/X86/funcattrs-prop-undefined.ll
LLVM :: ThinLTO/X86/funcattrs-prop-weak.ll
LLVM :: ThinLTO/X86/funcattrs-prop.ll
LLVM :: ThinLTO/X86/funcimport.ll
LLVM :: ThinLTO/X86/funcimport2.ll
LLVM :: ThinLTO/X86/funcimport_alwaysinline.ll
LLVM :: ThinLTO/X86/function_entry_count.ll
LLVM :: ThinLTO/X86/globals-import-blockaddr.ll
LLVM :: ThinLTO/X86/guid_collision.ll
LLVM :: ThinLTO/X86/hidden-escaped-symbols-alt.ll
LLVM :: ThinLTO/X86/hidden-escaped-symbols.ll
LLVM :: ThinLTO/X86/ifunc-import.ll
LLVM :: ThinLTO/X86/import-constant.ll
LLVM :: ThinLTO/X86/import-dsolocal.ll
LLVM :: ThinLTO/X86/import-metadata.ll
LLVM :: ThinLTO/X86/import-ro-constant.ll
LLVM :: ThinLTO/X86/index-const-prop-O0.ll
LLVM :: ThinLTO/X86/index-const-prop-alias.ll
LLVM :: ThinLTO/X86/index-const-prop-cache.ll
LLVM :: ThinLTO/X86/index-const-prop-comdat.ll
LLVM :: ThinLTO/X86/index-const-prop-dead.ll
LLVM :: ThinLTO/X86/index-const-prop-full-lto.ll
LLVM :: ThinLTO/X86/index-const-prop-gvref-pie.ll
LLVM :: ThinLTO/X86/index-const-prop-gvref.ll
LLVM :: ThinLTO/X86/index-const-prop-ldst.ll
LLVM :: ThinLTO/X86/index-const-prop-linkage.ll
LLVM :: ThinLTO/X86/index-const-prop2.ll
LLVM :: ThinLTO/X86/linkonce_aliasee_ref_import.ll
LLVM :: ThinLTO/X86/linkonce_odr_unnamed_addr.ll
LLVM :: ThinLTO/X86/linkonce_resolution_comdat.ll
LLVM :: ThinLTO/X86/lower_type_test_phi.ll
LLVM :: ThinLTO/X86/memprof-supports-hot-cold-new.ll
LLVM :: ThinLTO/X86/module_asm2.ll
LLVM :: ThinLTO/X86/module_asm_glob.ll
LLVM :: ThinLTO/X86/noinline.ll
LLVM :: ThinLTO/X86/nonprevailing_weak_globals_import.ll
LLVM :: ThinLTO/X86/nossp.ll
LLVM :: ThinLTO/X86/personality-local.ll
LLVM :: ThinLTO/X86/personality.ll
LLVM :: ThinLTO/X86/pr35472.ll
LLVM :: ThinLTO/X86/prevailing_weak_globals_import.ll
LLVM :: ThinLTO/X86/public-type-test.ll
LLVM :: ThinLTO/X86/reference_non_importable.ll
LLVM :: ThinLTO/X86/save_objects.ll
LLVM :: ThinLTO/X86/selective-save-temps.ll
LLVM :: ThinLTO/X86/strong_non_prevailing.ll
LLVM :: ThinLTO/X86/visibility-elf.ll
LLVM :: ThinLTO/X86/visibility-macho.ll
LLVM :: ThinLTO/X86/weak_resolution.ll
LLVM :: ThinLTO/X86/windows-vftable.ll
LLVM :: ThinLTO/X86/workload.ll
LLVM :: ThinLTO/X86/writeonly-with-refs.ll
LLVM :: ThinLTO/X86/writeonly2.ll
I think this is a false positive but I'm not sure. I thought it would be valuable to document this; perhaps there can be a suppression written or such.