rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
96.92k stars 12.53k forks source link

Debug LLVM + `-Z time-llvm-passes` asserts compiling simplest program. #48329

Open emilio opened 6 years ago

emilio commented 6 years ago

For context, I was trying to add PGO support to rustc, and I was adding a couple LLVM passes for profile info generation and usage, and the only thing I managed to do is crashing rustc under LLVM, or that my changes did nothing, so I built with debug LLVM to check whether I was doing something obviously wrong. Furthermore, I wanted to see if the passes I was adding were actually being executed, thus I tried -Z time-llvm-passes.

~For the record, I am hitting release crashes under llvm::SelectionDAGISel with my changes (without -Z time-llvm-passes), so I suspect this is a more serious issue than "LLVM uses a static hashmap to store timing info".~ These assertions reproduce without any change on 16362c737fe740f630ada06349fa9004e2a51bb7.

On a rustc compiled with the following config.toml (comments stripped for brevity):

[llvm]
optimize = false
assertions = true

[build]
profiler = true # This is because I was trying to do PGO stuff, but I suspect it's unnecessary.
configure-args = ['--enable-profiler', '--enable-debug', '--enable-llvm-assertions'] # I'd ignore this since I tweaked other fields manually.
[install]
[rust]
debug-assertions = true
debuginfo = true
debuginfo-lines = true
[target.x86_64-unknown-linux-gnu]
[dist]

Compiled from 16362c737fe740f630ada06349fa9004e2a51bb7, with:

$ ./x.py build --stage 1 src/libtest

Given a t.rs file like:

fn main() {}

Building it with:

./build/x86_64-unknown-linux-gnu/stage1/bin/rustc -Z time-llvm-passes t.rs

Asserts with:

rustc: /home/emilio/projects/moz/rust/src/llvm/lib/Support/Timer.cpp:133: void llvm::Timer::startTimer(): Assertion `!Running && "Cannot start a running timer"' failed.

I need to compile a slightly more complex file to be able to catch it under rr, but the stack is:

``` (rr) bt #0 0x00007f54039a766b in raise () from /lib64/libc.so.6 #1 0x00007f54039a9381 in abort () from /lib64/libc.so.6 #2 0x00007f540399f8fa in __assert_fail_base () from /lib64/libc.so.6 #3 0x00007f540399f972 in __assert_fail () from /lib64/libc.so.6 #4 0x00007f53f0b26c20 in llvm::Timer::startTimer (this=0x7f53e008f438) at /home/emilio/projects/moz/rust/src/llvm/lib/Support/Timer.cpp:133 #5 0x00007f53f02c29a2 in llvm::TimeRegion::TimeRegion (this=0x7f53e9e71f90, t=0x7f53e008f438) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/Support/Timer.h:149 #6 0x00007f53f0b27222 in llvm::NamedRegionTimer::NamedRegionTimer (this=0x7f53e9e71f90, Name=..., Description=..., GroupName=..., GroupDescription=..., Enabled=true) at /home/emilio/projects/moz/rust/src/llvm/lib/Support/Timer.cpp:215 #7 0x00007f53ef778cd6 in llvm::SelectionDAGISel::CodeGenAndEmitDAG (this=0x7f53d4002040) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:883 #8 0x00007f53ef777154 in llvm::SelectionDAGISel::SelectBasicBlock (this=0x7f53d4002040, Begin=..., End=..., HadTailCall=@0x7f53e9e7285f: false) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:664 #9 0x00007f53ef77cbaa in llvm::SelectionDAGISel::SelectAllBasicBlocks (this=0x7f53d4002040, Fn=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1624 #10 0x00007f53ef775e3e in llvm::SelectionDAGISel::runOnMachineFunction (this=0x7f53d4002040, mf=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:466 #11 0x00007f53ee213fad in (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction (this=0x7f53d4002040, MF=...) at /home/emilio/projects/moz/rust/src/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:175 #12 0x00007f53efaf72a3 in llvm::MachineFunctionPass::runOnFunction (this=0x7f53d4002040, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/MachineFunctionPass.cpp:62 #13 0x00007f53f07f353b in llvm::FPPassManager::runOnFunction (this=0x7f53d4004be0, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1520 #14 0x00007f53f07f36bc in llvm::FPPassManager::runOnModule (this=0x7f53d4004be0, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1541 #15 0x00007f53f07f3a0d in (anonymous namespace)::MPPassManager::runOnModule (this=0x7f53d40206b0, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1597 #16 0x00007f53f07f40f9 in llvm::legacy::PassManagerImpl::run (this=0x7f53d40042d0, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1700 #17 0x00007f53f07f42f1 in llvm::legacy::PassManager::run (this=0x7f53d400fc50, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1731 #18 0x00007f53ee0bf47e in LLVMRustWriteOutputFile (Target=0x7f53f50de6d0, PMR=0x7f53d400fc50, M=0x7f53f484f8a0, Path=0x7f53d4020660 "test.test1.rcgu.o", RustFileType=) at ../rustllvm/PassWrapper.cpp:530 #19 0x00007f53ede2e7a2 in rustc_trans::back::write::write_output_file (handler=0x7f53e9e738e0, target=0x2, pm=0x7f53e9e71bc0, m=0x0, output=0x7f53d400b270, file_type=rustc_llvm::ffi::FileType::ObjectFile) at librustc_trans/back/write.rs:102 #20 0x00007f53ede15176 in rustc_trans::back::write::codegen::{{closure}}::{{closure}} (cpm=0x7f53d400fc50) at librustc_trans/back/write.rs:773 #21 rustc_trans::back::write::codegen::with_codegen (tm=0x7f53f50de6d0, llmod=, no_builtins=, f=...) at librustc_trans/back/write.rs:639 #22 rustc_trans::back::write::codegen::{{closure}} () at librustc_trans/back/write.rs:772 #23 0x00007f53ede0e22a in rustc::util::common::time (do_it=, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120 #24 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=, diag_handler=, mtrans=..., config=, timeline=) at librustc_trans/back/write.rs:695 #25 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53e9e73ef8, work_item=..., timeline=) at librustc_trans/back/write.rs:1346 #26 0x00007f53ede01046 in rustc_trans::back::write::spawn_work::{{closure}} () at librustc_trans/back/write.rs:1970 #27 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #28 0x00007f53ede79c2e in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #29 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #30 std::panicking::try::do_call (data=) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #31 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x0, data=0x2 , data_ptr=0x7f53e9e746f8, vtable_ptr=0x7f53e9e746f0) at libpanic_unwind/lib.rs:102 #32 0x00007f53ede79b1c in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #33 0x00007f53ede0b7e9 in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #34 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #35 >::call_box (self=0x7f53dc002a80, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #36 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::---Type to continue, or q to quit--- hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #37 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #38 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53e0023250) at libstd/sys/unix/thread.rs:90 #39 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #40 0x00007f5403a8798f in clone () from /lib64/libc.so.6 (rr) ```

The threads are doing:

``` (rr) info thread Id Target Id Frame 1 Thread 31405.31405 (mmap_hardlink_3_rustc) 0x00007f5403555bdd in pthread_join () from /lib64/libpthread.so.0 2 Thread 31405.31411 (rustc) 0x0000000070000002 in ?? () * 3 Thread 31405.31429 (rustc) 0x00007f54039a766b in raise () from /lib64/libc.so.6 4 Thread 31405.31414 (rustc) 0x0000000070000002 in ?? () 5 Thread 31405.31417 (rustc) 0x0000000070000002 in ?? () 6 Thread 31405.31426 (rustc) 0x00007f53ee144373 in llvm::SmallPtrSetImplBase::insert_imp (this=0x7f53ea372a60, Ptr=0x7f53e0054a30) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/SmallPtrSet.h:132 7 Thread 31405.31432 (rustc) 0x00007f53f07f7236 in llvm::DenseMapIterator, llvm::detail::DenseMapPair, true>::DenseMapIterator (this=0x7f53e9971e20, I=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:1149 8 Thread 31405.31435 (rustc) llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::initEmpty (this=0x7f53cc025348) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:347 9 Thread 31405.31438 (rustc) 0x00007f53ee416f36 in llvm::dyn_cast (Val=0x7f53f57a1d08) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/Support/Casting.h:333 ```

Thread 1:

``` (rr) thread 1 [Switching to thread 1 (Thread 31405.31405)] #0 0x00007f5403555bdd in pthread_join () from /lib64/libpthread.so.0 (rr) bt #0 0x00007f5403555bdd in pthread_join () from /lib64/libpthread.so.0 #1 0x00007f5403dd2280 in std::sys::unix::thread::Thread::join (self=...) at libstd/sys/unix/thread.rs:176 #2 0x00007f54040fa8f2 in >::join (self=) at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:1200 #3 >::join (self=...) at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:1322 #4 0x00007f540420b521 in rustc_driver::in_rustc_thread (f=...) at librustc_driver/lib.rs:1431 #5 rustc_driver::monitor (f=...) at librustc_driver/lib.rs:1440 #6 rustc_driver::run (run_compiler=...) at librustc_driver/lib.rs:158 #7 rustc_driver::main () at librustc_driver/lib.rs:1512 #8 0x000056323a130eb6 in std::rt::lang_start::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/rt.rs:74 #9 0x00007f5403da3788 in std::rt::lang_start_internal::{{closure}} () at libstd/rt.rs:59 #10 std::panicking::try::do_call (data=0x7fffba2d4918 "XI-\272\377\177\000") at libstd/panicking.rs:479 #11 0x00007f5403df628f in __rust_maybe_catch_panic (f=0xffffffffffffffda, data=0x7f53fcbe99d0 "\263z\000", data_ptr=0x7fffba2d4928, vtable_ptr=0x7fffba2d4920) at libpanic_unwind/lib.rs:102 #12 0x00007f5403da367a in std::panicking::try (f=...) at libstd/panicking.rs:458 #13 0x00007f5403db9c67 in std::panic::catch_unwind (f=...) at libstd/panic.rs:358 #14 std::rt::lang_start_internal (main=..., argc=, argv=0x7fffba2d4b58) at libstd/rt.rs:58 #15 0x000056323a130ea2 in main () #16 0x00007f540399100a in __libc_start_main () from /lib64/libc.so.6 #17 0x000056323a130d7a in _start () (rr) ```

Thread 2:

``` (rr) bt #0 0x0000000070000002 in ?? () #1 0x00007f54044da83f in _raw_syscall () at /home/emilio/projects/moz/rr/src/preload/raw_syscall.S:120 #2 0x00007f54044d7d84 in traced_raw_syscall (call=) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:203 #3 sys_readlink (call=) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:1866 #4 syscall_hook_internal (call=0x7f53fbbe8fa0) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:2496 #5 0x00007f54044d61a1 in syscall_hook (call=0x7f53fbbe8fa0) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:2576 #6 0x00007f54044d58da in _syscall_hook_trampoline () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:282 #7 0x00007f54044d590a in __morestack () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:417 #8 0x00007f54044d5925 in _syscall_hook_trampoline_48_3d_00_f0_ff_ff () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:428 #9 0x00007f540355acc1 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #10 0x00007f5403dccb10 in std::sys::unix::condvar::Condvar::wait (self=, mutex=) at libstd/sys/unix/condvar.rs:78 #11 std::sys_common::condvar::Condvar::wait (mutex=, self=) at libstd/sys_common/condvar.rs:51 #12 std::sync::condvar::Condvar::wait (self=, guard=...) at libstd/sync/condvar.rs:212 #13 0x00007f5403de38f8 in std::thread::park () at libstd/thread/mod.rs:800 #14 0x00007f5403db7d70 in std::sync::mpsc::blocking::WaitToken::wait (self=...) at libstd/sync/mpsc/blocking.rs:81 #15 0x00007f53edd4325a in >::recv (self=0x7f53dc001bc0, deadline=...) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/stream.rs:210 #16 0x00007f53ede45afe in >::recv (self=0x7f53fcbde2b8) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/mod.rs:1210 #17 0x00007f53edd98ab1 in rustc_trans::back::write::OngoingCrateTranslation::wait_for_signal_to_translate_item (self=) at librustc_trans/back/write.rs:2256 #18 rustc_trans::base::trans_crate (tcx=..., rx=...) at librustc_trans/base.rs:837 #19 0x00007f53edd664be in ::trans_crate (self=, tcx=..., rx=...) at librustc_trans/lib.rs:226 #20 0x00007f540414aa5d in rustc_driver::driver::phase_4_translate_to_llvm::{{closure}} () at librustc_driver/driver.rs:1103 #21 rustc::util::common::time (do_it=, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120 #22 0x00007f54041177d9 in rustc_driver::driver::phase_4_translate_to_llvm (trans=..., tcx=..., rx=...) at librustc_driver/driver.rs:1102 #23 0x00007f54041d0ff6 in rustc_driver::driver::compile_input::{{closure}} (tcx=..., analysis=..., rx=..., result=...) at librustc_driver/driver.rs:252 #24 0x00007f54041cc7c9 in rustc_driver::driver::phase_3_run_analysis_passes::{{closure}} (tcx=...) at librustc_driver/driver.rs:1085 #25 rustc::ty::context::tls::enter::{{closure}} (tls=) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1573 #26 >::try_with (self=, f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:377 #27 >::with (self=, f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:288 #28 0x00007f54041c7337 in rustc::ty::context::tls::enter (gcx=, interners=, f=...) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1570 #29 rustc::ty::context::tls::enter_global::{{closure}} (span_dbg=) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1557 #30 >::try_with (self=0x7f54044d15e8 , f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:377 #31 >::with (self=0x7f54044d15e8 , f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:288 #32 0x00007f54041f4192 in rustc::ty::context::tls::enter_global (gcx=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1554 #33 rustc::ty::context::TyCtxt::create_and_enter (s=0x7f53fcbe4c90, cstore=..., local_providers=..., extern_providers=..., arenas=, resolutions=..., hir=..., on_disk_query_result_cache=..., crate_name=..., tx=..., output_filenames=, f=...) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1197 #34 0x00007f5404112e4d in rustc_driver::driver::phase_3_run_analysis_passes (sess=0x7f53fcbe4c90, cstore=..., trans=..., control=, hir_map=..., analysis=..., resolutions=..., arenas=, name=..., output_filenames=, f=...) at librustc_driver/driver.rs:998 #35 rustc_driver::driver::compile_input (trans=..., sess=, cstore=0x7f53f40b5ad0, input_path=, input=, outdir=, output=, addl_plugins=..., control=) at librustc_driver/driver.rs:214 #36 0x00007f54042025b8 in rustc_driver::run_compiler (args=..., callbacks=..., file_loader=..., emitter_dest=...) at librustc_driver/lib.rs:506 #37 0x00007f540416ca74 in rustc_driver::main::{{closure}} () at librustc_driver/lib.rs:1519 #38 rustc_driver::run::{{closure}} () at librustc_driver/lib.rs:159 #39 rustc_driver::monitor::{{closure}} () at librustc_driver/lib.rs:1441 #40 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #41 0x00007f5403df628f in __rust_maybe_catch_panic (f=0xca, data=0x56323abb3cb8 "\002\000", data_ptr=0x7f53fcbe8a58, vtable_ptr=0x7f53fcbe8a50) at libpanic_unwind/lib.rs:102 #42 0x00007f540420e8b4 in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #43 0x00007f540410d39f in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #44 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #45 >::call_box (self=0x56323abb3c40, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #46 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #47 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #48 std::sys::unix::thread::Thread::new::thread_start (main=0x56323abb3d60) at libstd/sys/unix/thread.rs:90 #49 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #50 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```

Thread 3 is the crashing thread, with the first stack.

Thread 4:

``` (rr) bt #0 0x0000000070000002 in ?? () #1 0x00007f54044da83f in _raw_syscall () at /home/emilio/projects/moz/rr/src/preload/raw_syscall.S:120 #2 0x00007f54044d7d84 in traced_raw_syscall (call=) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:203 #3 sys_readlink (call=) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:1866 #4 syscall_hook_internal (call=0x7f53eab77fa0) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:2496 #5 0x00007f54044d61a1 in syscall_hook (call=0x7f53eab77fa0) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:2576 #6 0x00007f54044d58da in _syscall_hook_trampoline () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:282 #7 0x00007f54044d590a in __morestack () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:417 #8 0x00007f54044d5925 in _syscall_hook_trampoline_48_3d_00_f0_ff_ff () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:428 #9 0x00007f540355acc1 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #10 0x00007f5403dccb10 in std::sys::unix::condvar::Condvar::wait (self=, mutex=) at libstd/sys/unix/condvar.rs:78 #11 std::sys_common::condvar::Condvar::wait (mutex=, self=) at libstd/sys_common/condvar.rs:51 #12 std::sync::condvar::Condvar::wait (self=, guard=...) at libstd/sync/condvar.rs:212 #13 0x00007f5403de38f8 in std::thread::park () at libstd/thread/mod.rs:800 #14 0x00007f5403db7d70 in std::sync::mpsc::blocking::WaitToken::wait (self=...) at libstd/sync/mpsc/blocking.rs:81 #15 0x00007f54000f1ad1 in >::recv (self=0x7f53dc001e00, deadline=...) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/stream.rs:210 #16 0x00007f54000f5f9b in >::recv (self=) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/mod.rs:1210 #17 as core::iter::iterator::Iterator>::next (self=0x7f53ead778d0) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/mod.rs:1589 #18 0x00007f54000eee0f in jobserver::imp::spawn_helper::{{closure}} () at /home/emilio/.cargo/registry/src/github.com-1ecc6299db9ec823/jobserver-0.1.9/src/lib.rs:599 #19 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #20 0x00007f54000f1810 in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #21 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #22 std::panicking::try::do_call (data=) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #23 0x00007f5403df628f in __rust_maybe_catch_panic (f=0xca, data=0x7f53f508d89c "\000", data_ptr=0x7f53ead77a00, vtable_ptr=0x7f53ead779f8) at libpanic_unwind/lib.rs:102 #24 0x00007f54000f1763 in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #25 0x00007f54000f041e in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #26 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #27 >::call_box (self=0x7f53f508d910, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #28 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #29 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #30 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53f508d850) at libstd/sys/unix/thread.rs:90 #31 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #32 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```

Thread 5:

``` (rr) bt #0 0x0000000070000002 in ?? () #1 0x00007f54044da83f in _raw_syscall () at /home/emilio/projects/moz/rr/src/preload/raw_syscall.S:120 #2 0x00007f54044d7d84 in traced_raw_syscall (call=) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:203 #3 sys_readlink (call=) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:1866 #4 syscall_hook_internal (call=0x7f53ea676fa0) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:2496 #5 0x00007f54044d61a1 in syscall_hook (call=0x7f53ea676fa0) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:2576 #6 0x00007f54044d58da in _syscall_hook_trampoline () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:282 #7 0x00007f54044d590a in __morestack () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:417 #8 0x00007f54044d5925 in _syscall_hook_trampoline_48_3d_00_f0_ff_ff () at /home/emilio/projects/moz/rr/src/preload/syscall_hook.S:428 #9 0x00007f540355acc1 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0 #10 0x00007f5403dccb10 in std::sys::unix::condvar::Condvar::wait (self=, mutex=) at libstd/sys/unix/condvar.rs:78 #11 std::sys_common::condvar::Condvar::wait (mutex=, self=) at libstd/sys_common/condvar.rs:51 #12 std::sync::condvar::Condvar::wait (self=, guard=...) at libstd/sync/condvar.rs:212 #13 0x00007f5403de38f8 in std::thread::park () at libstd/thread/mod.rs:800 #14 0x00007f5403db7d70 in std::sync::mpsc::blocking::WaitToken::wait (self=...) at libstd/sync/mpsc/blocking.rs:81 #15 0x00007f53edd6addf in >::recv (self=0x7f53f508b4a0, deadline=...) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/shared.rs:239 #16 0x00007f53ede45560 in >::recv (self=0x7f53ea8758b0) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/mod.rs:1218 #17 0x00007f53ede0277c in rustc_trans::back::write::start_executing_work::{{closure}} () at librustc_trans/back/write.rs:1757 #18 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #19 0x00007f53ede79bdc in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #20 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #21 std::panicking::try::do_call (data=0x7f53ea876498 "\000") at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #22 0x00007f5403df628f in __rust_maybe_catch_panic (f=0xca, data=0x7f53f508df3c "\000", data_ptr=0x7f53ea876638, vtable_ptr=0x7f53ea876630) at libpanic_unwind/lib.rs:102 #23 0x00007f53ede79a2c in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #24 0x00007f53ede0b9aa in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #25 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #26 >::call_box (self=0x7f53f508ec70, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #27 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #28 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #29 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53f508ee20) at libstd/sys/unix/thread.rs:90 #30 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #31 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```

Thread 6 is running the same LLVM pass:

``` (rr) bt #0 0x00007f53ee144373 in llvm::SmallPtrSetImplBase::insert_imp (this=0x7f53ea372a60, Ptr=0x7f53e0054a30) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/SmallPtrSet.h:132 #1 0x00007f53ee63d62a in llvm::SmallPtrSetImpl::insert (this=0x7f53ea372a60, Ptr=0x7f53e0054a30) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/SmallPtrSet.h:372 #2 0x00007f53ef6b84b1 in llvm::ScheduleDAGSDNodes::BuildSchedUnits (this=0x7f53e00a3f20) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:334 #3 0x00007f53ef6b914c in llvm::ScheduleDAGSDNodes::BuildSchedGraph (this=0x7f53e00a3f20, AA=0x0) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:518 #4 0x00007f53ef6a6b9f in (anonymous namespace)::ScheduleDAGRRList::Schedule (this=0x7f53e00a3f20) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:365 #5 0x00007f53ef6b6bfb in llvm::ScheduleDAGSDNodes::Run (this=0x7f53e00a3f20, dag=0x7f53e00549f0, bb=0x7f53e0087ed8) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:63 #6 0x00007f53ef778d09 in llvm::SelectionDAGISel::CodeGenAndEmitDAG (this=0x7f53e00080f0) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:884 #7 0x00007f53ef77baac in llvm::SelectionDAGISel::SelectAllBasicBlocks (this=0x7f53e00080f0, Fn=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1422 #8 0x00007f53ef775e3e in llvm::SelectionDAGISel::runOnMachineFunction (this=0x7f53e00080f0, mf=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:466 #9 0x00007f53ee213fad in (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction (this=0x7f53e00080f0, MF=...) at /home/emilio/projects/moz/rust/src/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:175 #10 0x00007f53efaf72a3 in llvm::MachineFunctionPass::runOnFunction (this=0x7f53e00080f0, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/MachineFunctionPass.cpp:62 #11 0x00007f53f07f353b in llvm::FPPassManager::runOnFunction (this=0x7f53e0095140, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1520 #12 0x00007f53f07f36bc in llvm::FPPassManager::runOnModule (this=0x7f53e0095140, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1541 #13 0x00007f53f07f3a0d in (anonymous namespace)::MPPassManager::runOnModule (this=0x7f53e00562a0, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1597 #14 0x00007f53f07f40f9 in llvm::legacy::PassManagerImpl::run (this=0x7f53e000a860, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1700 #15 0x00007f53f07f42f1 in llvm::legacy::PassManager::run (this=0x7f53e0090150, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1731 #16 0x00007f53ee0bf47e in LLVMRustWriteOutputFile (Target=0x7f53f56b77e0, PMR=0x7f53e0090150, M=0x7f53f4965900, Path=0x7f53e0011850 "test.test0.rcgu.o", RustFileType=) at ../rustllvm/PassWrapper.cpp:530 #17 0x00007f53ede2e7a2 in rustc_trans::back::write::write_output_file (handler=0x7f53ea3748e0, target=0x7f53ea372a60, pm=0x7f53e0054a30, m=0x7f53ea372a88, output=0x7f53e0011080, file_type=rustc_llvm::ffi::FileType::ObjectFile) at librustc_trans/back/write.rs:102 #18 0x00007f53ede15176 in rustc_trans::back::write::codegen::{{closure}}::{{closure}} (cpm=0x7f53e0090150) at librustc_trans/back/write.rs:773 #19 rustc_trans::back::write::codegen::with_codegen (tm=0x7f53f56b77e0, llmod=, no_builtins=, f=...) at librustc_trans/back/write.rs:639 #20 rustc_trans::back::write::codegen::{{closure}} () at librustc_trans/back/write.rs:772 #21 0x00007f53ede0e22a in rustc::util::common::time (do_it=, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120 #22 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=, diag_handler=, mtrans=..., config=, timeline=) at librustc_trans/back/write.rs:695 #23 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53ea374ef8, work_item=..., timeline=) at librustc_trans/back/write.rs:1346 #24 0x00007f53ede01046 in rustc_trans::back::write::spawn_work::{{closure}} () at librustc_trans/back/write.rs:1970 #25 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #26 0x00007f53ede79c2e in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #27 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #28 std::panicking::try::do_call (data=) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #29 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x7f53ea372a98, data=0x7f53ea372a60 "\006", data_ptr=0x7f53ea3756f8, vtable_ptr=0x7f53ea3756f0) at libpanic_unwind/lib.rs:102 #30 0x00007f53ede79b1c in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #31 0x00007f53ede0b7e9 in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #32 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #33 >::call_box (self=0x7f53dc001130, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #34 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) #35 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #36 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53e4000d00) at libstd/sys/unix/thread.rs:90 #37 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #38 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```

Thread 7:

``` (rr) thread 7 [Switching to thread 7 (Thread 31405.31432)] #0 0x00007f53f07f7236 in llvm::DenseMapIterator, llvm::detail::DenseMapPair, true>::DenseMapIterator (this=0x7f53e9971e20, I=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:1149 1149 : DebugEpochBase::HandleBase(I), Ptr(I.Ptr), End(I.End) {} (rr) bt #0 0x00007f53f07f7236 in llvm::DenseMapIterator, llvm::detail::DenseMapPair, true>::DenseMapIterator (this=0x7f53e9971e20, I=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:1149 #1 0x00007f53f07f194c in llvm::PMDataManager::findAnalysisPass (this=0x7f53d8001130, AID=0x7f53f3ff2a08 , SearchParent=false) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1096 #2 0x00007f53f07efbc0 in llvm::PMTopLevelManager::findAnalysisPass (this=0x7f53d80016d0, AID=0x7f53f3ff2a08 ) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:725 #3 0x00007f53f07f19cb in llvm::PMDataManager::findAnalysisPass (this=0x7f53d8001130, AID=0x7f53f3ff2a08 , SearchParent=true) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1103 #4 0x00007f53f07f07ad in llvm::PMDataManager::verifyPreservedAnalysis (this=0x7f53d8001130, P=0x7f53d800e480) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:867 #5 0x00007f53f07f35d8 in llvm::FPPassManager::runOnFunction (this=0x7f53d8001110, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1529 #6 0x00007f53f07f36bc in llvm::FPPassManager::runOnModule (this=0x7f53d8001110, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1541 #7 0x00007f53f07f3a0d in (anonymous namespace)::MPPassManager::runOnModule (this=0x7f53d8001a20, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1597 #8 0x00007f53f07f40f9 in llvm::legacy::PassManagerImpl::run (this=0x7f53d8001510, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1700 #9 0x00007f53f07f42f1 in llvm::legacy::PassManager::run (this=0x7f53d800ab30, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1731 #10 0x00007f53ee0bf47e in LLVMRustWriteOutputFile (Target=0x7f53f4fbb570, PMR=0x7f53d800ab30, M=0x7f53f407de60, Path=0x7f53d800a880 "test.test2.rcgu.o", RustFileType=) at ../rustllvm/PassWrapper.cpp:530 #11 0x00007f53ede2e7a2 in rustc_trans::back::write::write_output_file (handler=0x7f53e99728e0, target=0x7f53e9971e20, pm=0x7f53e9971e40, m=0x7f53d8003b10, output=0x7f53d800b070, file_type=rustc_llvm::ffi::FileType::ObjectFile) at librustc_trans/back/write.rs:102 #12 0x00007f53ede15176 in rustc_trans::back::write::codegen::{{closure}}::{{closure}} (cpm=0x7f53d800ab30) at librustc_trans/back/write.rs:773 #13 rustc_trans::back::write::codegen::with_codegen (tm=0x7f53f4fbb570, llmod=, no_builtins=, f=...) at librustc_trans/back/write.rs:639 #14 rustc_trans::back::write::codegen::{{closure}} () at librustc_trans/back/write.rs:772 #15 0x00007f53ede0e22a in rustc::util::common::time (do_it=, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120 #16 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=, diag_handler=, mtrans=..., config=, timeline=) at librustc_trans/back/write.rs:695 #17 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53e9972ef8, work_item=..., timeline=) at librustc_trans/back/write.rs:1346 #18 0x00007f53ede01046 in rustc_trans::back::write::spawn_work::{{closure}} () at librustc_trans/back/write.rs:1970 #19 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #20 0x00007f53ede79c2e in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #21 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #22 std::panicking::try::do_call (data=) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #23 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x7f53e9971e20, data=0x7f53e9971e20 "\020\022", data_ptr=0x7f53e99736f8, vtable_ptr=0x7f53e99736f0) at libpanic_unwind/lib.rs:102 #24 0x00007f53ede79b1c in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #25 0x00007f53ede0b7e9 in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #26 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #27 >::call_box (self=0x7f53dc003260, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #28 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #29 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #30 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53d4022590) at libstd/sys/unix/thread.rs:90 #31 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #32 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```

Thread 8:

``` (rr) thread 8 [Switching to thread 8 (Thread 31405.31435)] #0 llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::initEmpty (this=0x7f53cc025348) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:347 347 ::new (&B->getFirst()) KeyT(EmptyKey); (rr) bt #0 llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::initEmpty (this=0x7f53cc025348) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:347 #1 0x00007f53ee3b6cb7 in llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::moveFromOldBuckets (this=0x7f53cc025348, OldBucketsBegin=0x7f53cc049160, OldBucketsEnd=0x7f53cc051160) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:362 #2 0x00007f53ee3b6a5e in llvm::DenseMap, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::grow (this=0x7f53cc025348, AtLeast=8192) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:739 #3 0x00007f53ee3b65c4 in llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::grow (this=0x7f53cc025348, AtLeast=8192) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:502 #4 0x00007f53ee3b5da5 in llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::InsertIntoBucketImpl (this=0x7f53cc025348, Key=@0x7f53e947094c: 7219, Lookup=@0x7f53e947094c: 7219, TheBucket=0x7f53cc04acd0) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:546 #5 0x00007f53ee3b4ce7 in llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::InsertIntoBucket (this=0x7f53cc025348, TheBucket=0x7f53cc04acd0, Key=@0x7f53e947094c: 7219) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:512 #6 0x00007f53ee3b3ad1 in llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::FindAndConstruct (this=0x7f53cc025348, Key=@0x7f53e947094c: 7219) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:304 #7 0x00007f53ee3b20c4 in llvm::DenseMapBase, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >, unsigned int, std::pair, llvm::DenseMapInfo, llvm::detail::DenseMapPair > >::operator[] (this=0x7f53cc025348, Key=@0x7f53e947094c: 7219) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:308 #8 0x00007f53ee39971b in llvm::X86InstrInfo::AddTableEntry (R2MTable=..., M2RTable=..., RegOp=7222, MemOp=7219, Flags=68) at /home/emilio/projects/moz/rust/src/llvm/lib/Target/X86/X86InstrInfo.cpp:3747 #9 0x00007f53ee3993cf in llvm::X86InstrInfo::X86InstrInfo (this=0x7f53cc025110, STI=...) at /home/emilio/projects/moz/rust/src/llvm/lib/Target/X86/X86InstrInfo.cpp:3715 #10 0x00007f53ee3e75eb in llvm::X86Subtarget::X86Subtarget (this=0x7f53cc024ef0, TT=..., CPU=..., FS=..., TM=..., StackAlignOverride=0) at /home/emilio/projects/moz/rust/src/llvm/lib/Target/X86/X86Subtarget.cpp:371 #11 0x00007f53ee3f02e0 in llvm::make_unique (args#0=..., args#1=..., args#2=..., args#3=..., args#4=@0x7f53f503f0a4: 0) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/STLExtras.h:945 #12 0x00007f53ee3ede09 in llvm::X86TargetMachine::getSubtargetImpl (this=0x7f53f503ed90, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/Target/X86/X86TargetMachine.cpp:266 #13 0x00007f53ef955b05 in (anonymous namespace)::AtomicExpand::runOnFunction (this=0x7f53cc000b20, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/CodeGen/AtomicExpandPass.cpp:200 #14 0x00007f53f07f353b in llvm::FPPassManager::runOnFunction (this=0x7f53cc0070e0, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1520 #15 0x00007f53f07f36bc in llvm::FPPassManager::runOnModule (this=0x7f53cc0070e0, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1541 #16 0x00007f53f07f3a0d in (anonymous namespace)::MPPassManager::runOnModule (this=0x7f53cc001a20, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1597 #17 0x00007f53f07f40f9 in llvm::legacy::PassManagerImpl::run (this=0x7f53cc0014f0, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1700 #18 0x00007f53f07f42f1 in llvm::legacy::PassManager::run (this=0x7f53cc00a960, M=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1731 #19 0x00007f53ee0bf47e in LLVMRustWriteOutputFile (Target=0x7f53f503ed90, PMR=0x7f53cc00a960, M=0x7f53f571c4f0, Path=0x7f53cc00a820 "test.test3.rcgu.o", RustFileType=) at ../rustllvm/PassWrapper.cpp:530 #20 0x00007f53ede2e7a2 in rustc_trans::back::write::write_output_file (handler=0x7f53e94718e0, target=0x4, pm=0x7f53cc054660, m=0xffffffff, output=0x7f53cc00c060, file_type=rustc_llvm::ffi::FileType::ObjectFile) at librustc_trans/back/write.rs:102 #21 0x00007f53ede15176 in rustc_trans::back::write::codegen::{{closure}}::{{closure}} (cpm=0x7f53cc00a960) at librustc_trans/back/write.rs:773 #22 rustc_trans::back::write::codegen::with_codegen (tm=0x7f53f503ed90, llmod=, no_builtins=, f=...) at librustc_trans/back/write.rs:639 #23 rustc_trans::back::write::codegen::{{closure}} () at librustc_trans/back/write.rs:772 #24 0x00007f53ede0e22a in rustc::util::common::time (do_it=, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120 #25 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=, diag_handler=, mtrans=..., config=, timeline=) at librustc_trans/back/write.rs:695 #26 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53e9471ef8, work_item=..., timeline=) at librustc_trans/back/write.rs:1346 #27 0x00007f53ede01046 in rustc_trans::back::write::spawn_work::{{closure}} () at librustc_trans/back/write.rs:1970 #28 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #29 0x00007f53ede79c2e in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #30 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #31 std::panicking::try::do_call (data=) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #32 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x7f53cc054668, data=0x4 , data_ptr=0x7f53e94726f8, vtable_ptr=0x7f53e94726f0) at libpanic_unwind/lib.rs:102 #33 0x00007f53ede79b1c in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #34 0x00007f53ede0b7e9 in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #35 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #36 >::call_box (self=0x7f53dc003dc0, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #37 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #38 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #39 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53dc001770) at libstd/sys/unix/thread.rs:90 #40 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #41 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```

Thread 9:

``` (rr) bt #0 0x00007f53ee416f36 in llvm::dyn_cast (Val=0x7f53f57a1d08) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/Support/Casting.h:333 #1 0x00007f53f087faf9 in (anonymous namespace)::Verifier::verifyDominatesUse (this=0x7f53d0007720, I=..., i=0) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/Verifier.cpp:3711 #2 0x00007f53f0880887 in (anonymous namespace)::Verifier::visitInstruction (this=0x7f53d0007720, I=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/Verifier.cpp:3825 #3 0x00007f53f087c8a0 in (anonymous namespace)::Verifier::visitLoadInst (this=0x7f53d0007720, LI=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/Verifier.cpp:3133 #4 0x00007f53f088f8ab in llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visitLoad (this=0x7f53d0007720, I=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/IR/Instruction.def:153 #5 0x00007f53f0887d77 in llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit (this=0x7f53d0007720, I=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/IR/Instruction.def:153 #6 0x00007f53f086ac6f in (anonymous namespace)::Verifier::visit (this=0x7f53d0007720, I=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/Verifier.cpp:534 #7 0x00007f53f089736e in llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit, false, false> > (this=0x7f53d0007720, Start=..., End=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/IR/InstVisitor.h:92 #8 0x00007f53f0894c8e in llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit (this=0x7f53d0007720, BB=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/IR/InstVisitor.h:107 #9 0x00007f53f088f1a0 in llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit, false, false> > (this=0x7f53d0007720, Start=..., End=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/IR/InstVisitor.h:92 #10 0x00007f53f0887704 in llvm::InstVisitor<(anonymous namespace)::Verifier, void>::visit (this=0x7f53d0007720, F=...) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/IR/InstVisitor.h:103 #11 0x00007f53f086a741 in (anonymous namespace)::Verifier::verify (this=0x7f53d0007720, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/Verifier.cpp:348 #12 0x00007f53f08857d2 in (anonymous namespace)::VerifierLegacyPass::runOnFunction (this=0x7f53d0001e70, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/Verifier.cpp:4659 #13 0x00007f53f07f353b in llvm::FPPassManager::runOnFunction (this=0x7f53d0001110, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1520 #14 0x00007f53f07f32db in llvm::legacy::FunctionPassManagerImpl::run (this=0x7f53d0000c20, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1469 #15 0x00007f53f07f2ec3 in llvm::legacy::FunctionPassManager::run (this=0x7f53d0000c00, F=...) at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:1393 #16 0x00007f53ee0b9050 in LLVMRustRunFunctionPassManager (PMR=0x7f53d0000c00, M=) at ../rustllvm/PassWrapper.cpp:478 #17 0x00007f53ede37614 in rustc_trans::back::write::optimize (diag_handler=, cgcx=, mtrans=, config=, timeline=) at librustc_trans/back/write.rs:569 #18 rustc_trans::back::write::execute_work_item (cgcx=0x7f53e8f70ef8, work_item=..., timeline=) at librustc_trans/back/write.rs:1301 #19 0x00007f53ede01046 in rustc_trans::back::write::spawn_work::{{closure}} () at librustc_trans/back/write.rs:1970 #20 std::sys_common::backtrace::__rust_begin_short_backtrace (f=...) at /home/emilio/projects/moz/rust/src/libstd/sys_common/backtrace.rs:136 #21 0x00007f53ede79c2e in std::thread::Builder::spawn::{{closure}}::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:406 #22 as core::ops::function::FnOnce<()>>::call_once (self=..., _args=) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293 #23 std::panicking::try::do_call (data=) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479 #24 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x7f53f57a1d08, data=0x7f53f57a1d08 "\200Dy\365S\177", data_ptr=0x7f53e8f716f8, vtable_ptr=0x7f53e8f716f0) at libpanic_unwind/lib.rs:102 #25 0x00007f53ede79b1c in std::panicking::try (f=...) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:458 #26 0x00007f53ede0b7e9 in std::panic::catch_unwind (f=...) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:358 #27 std::thread::Builder::spawn::{{closure}} () at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:405 #28 >::call_box (self=0x7f53dc004920, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:788 #29 0x00007f5403dd1fec in _$LT$alloc..boxed..Box$LT$alloc..boxed..FnBox$LT$A$C$$u20$Output$u3d$R$GT$$u20$$u2b$$u20$$u27$a$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hbc01871d4ce3ef85 (self=, args=) at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798 #30 std::sys_common::thread::start_thread (main=) at libstd/sys_common/thread.rs:24 #31 std::sys::unix::thread::Thread::new::thread_start (main=0x7f53dc0025b0) at libstd/sys/unix/thread.rs:90 #32 0x00007f540355461b in start_thread () from /lib64/libpthread.so.0 #33 0x00007f5403a8798f in clone () from /lib64/libc.so.6 ```
emilio commented 6 years ago

cc @michaelwoerister, since I recall he mentioned about parallelizing LLVM's execution under rustc.

michaelwoerister commented 6 years ago

Thanks for the detailed bug report, @emilio!

@alexcrichton, do you know if we are compiling LLVM with LLVM_ENABLE_THREADS?

emilio commented 6 years ago

@alexcrichton, do you know if we are compiling LLVM with LLVM_ENABLE_THREADS?

We are. Also, the crashes I was seeing were due to the ordering of the passes I did, which broke some assumptions in LLVM. I managed to get #48346 working after all :)

michaelwoerister commented 6 years ago

Can this issue be closed then?

emilio commented 6 years ago

No, I meant the release crashes. The debug assertions and data race with -Z time-llvm-passes are still present.

tmandry commented 4 years ago

I hit this assertion today. It's reproducible when compiling a single file with a "hello world" main function. Adding -Ccodegen-units=1 stops the assertion from firing.