Repository: rust
Issue: Debug LLVM + `-Z time-llvm-passes` asserts compiling simplest program.
Labels: A-LLVM,T-compiler,C-bug

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):

```toml
[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:

```shell
$ ./x.py build --stage 1 src/libtest
```

Given a `t.rs` file like:

```rust
fn main() {}
```

Building it with:

```shell
./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:

<details>

```
(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=<optimized out>)
    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=<optimized out>, no_builtins=<optimized out>, 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=<optimized out>, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120
#24 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=<optimized out>, diag_handler=<optimized out>, mtrans=..., config=<optimized out>, timeline=<optimized out>)
    at librustc_trans/back/write.rs:695
#25 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53e9e73ef8, work_item=..., timeline=<optimized out>) 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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293
#30 std::panicking::try::do_call (data=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479
#31 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x0, data=0x2 <error: Cannot access memory at address 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53dc002a80, args=<optimized out>) 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 <return> to continue, or q <return> to quit---
hbc01871d4ce3ef85 (self=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#37 std::sys_common::thread::start_thread (main=<optimized out>) 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)
```

</details>

The threads are doing:

<details>

```
(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<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*>, llvm::detail::DenseMapPair<void const*, llvm::Pass*>, true>::DenseMapIterator<false, void> (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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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<llvm::InvokeInst, llvm::Instruction> (Val=0x7f53f57a1d08)
    at /home/emilio/projects/moz/rust/src/llvm/include/llvm/Support/Casting.h:333
```

</details>

Thread 1:

<details>

```
(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 <std::thread::JoinInner<T>>::join (self=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/thread/mod.rs:1200
#3  <std::thread::JoinHandle<T>>::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=<optimized out>, 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)
```

</details>

Thread 2:

<details>

```
(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=<optimized out>) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:203
#3  sys_readlink (call=<optimized out>) 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=<optimized out>, mutex=<optimized out>) at libstd/sys/unix/condvar.rs:78
#11 std::sys_common::condvar::Condvar::wait (mutex=<optimized out>, self=<optimized out>) at libstd/sys_common/condvar.rs:51
#12 std::sync::condvar::Condvar::wait (self=<optimized out>, 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 <std::sync::mpsc::stream::Packet<T>>::recv (self=0x7f53dc001bc0, deadline=...) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/stream.rs:210
#16 0x00007f53ede45afe in <std::sync::mpsc::Receiver<T>>::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=<optimized out>) at librustc_trans/back/write.rs:2256
#18 rustc_trans::base::trans_crate (tcx=..., rx=...) at librustc_trans/base.rs:837
#19 0x00007f53edd664be in <rustc_trans::LlvmTransCrate as rustc_trans_utils::trans_crate::TransCrate>::trans_crate (self=<optimized out>, 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=<optimized out>, 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=<optimized out>) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1573
#26 <std::thread::local::LocalKey<T>>::try_with (self=<optimized out>, f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:377
#27 <std::thread::local::LocalKey<T>>::with (self=<optimized out>, f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:288
#28 0x00007f54041c7337 in rustc::ty::context::tls::enter (gcx=<optimized out>, interners=<optimized out>, f=...) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1570
#29 rustc::ty::context::tls::enter_global::{{closure}} (span_dbg=<optimized out>) at /home/emilio/projects/moz/rust/src/librustc/ty/context.rs:1557
#30 <std::thread::local::LocalKey<T>>::try_with (self=0x7f54044d15e8 <ref.41.llvm.E49595CD>, f=...) at /home/emilio/projects/moz/rust/src/libstd/thread/local.rs:377
#31 <std::thread::local::LocalKey<T>>::with (self=0x7f54044d15e8 <ref.41.llvm.E49595CD>, 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=<optimized out>, resolutions=..., hir=..., 
    on_disk_query_result_cache=..., crate_name=..., tx=..., output_filenames=<optimized out>, 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=<optimized out>, hir_map=..., analysis=..., 
    resolutions=..., arenas=<optimized out>, name=..., output_filenames=<optimized out>, f=...) at librustc_driver/driver.rs:998
#35 rustc_driver::driver::compile_input (trans=..., sess=<optimized out>, cstore=0x7f53f40b5ad0, input_path=<optimized out>, input=<optimized out>, outdir=<optimized out>, 
    output=<optimized out>, addl_plugins=..., control=<optimized out>) 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x56323abb3c40, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#47 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>

Thread 3 is the crashing thread, with the first stack.

Thread 4:

<details>

```
(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=<optimized out>) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:203
#3  sys_readlink (call=<optimized out>) 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=<optimized out>, mutex=<optimized out>) at libstd/sys/unix/condvar.rs:78
#11 std::sys_common::condvar::Condvar::wait (mutex=<optimized out>, self=<optimized out>) at libstd/sys_common/condvar.rs:51
#12 std::sync::condvar::Condvar::wait (self=<optimized out>, 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 <std::sync::mpsc::stream::Packet<T>>::recv (self=0x7f53dc001e00, deadline=...) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/stream.rs:210
#16 0x00007f54000f5f9b in <std::sync::mpsc::Receiver<T>>::recv (self=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/mod.rs:1210
#17 <std::sync::mpsc::IntoIter<T> 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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293
#22 std::panicking::try::do_call (data=<optimized out>) 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53f508d910, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#29 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>

Thread 5:

<details>

```
(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=<optimized out>) at /home/emilio/projects/moz/rr/src/preload/syscallbuf.c:203
#3  sys_readlink (call=<optimized out>) 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=<optimized out>, mutex=<optimized out>) at libstd/sys/unix/condvar.rs:78
#11 std::sys_common::condvar::Condvar::wait (mutex=<optimized out>, self=<optimized out>) at libstd/sys_common/condvar.rs:51
#12 std::sync::condvar::Condvar::wait (self=<optimized out>, 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 <std::sync::mpsc::shared::Packet<T>>::recv (self=0x7f53f508b4a0, deadline=...) at /home/emilio/projects/moz/rust/src/libstd/sync/mpsc/shared.rs:239
#16 0x00007f53ede45560 in <std::sync::mpsc::Receiver<T>>::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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53f508ec70, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#28 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>

Thread 6 is running the same LLVM pass:

<details>

```
(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<llvm::SDNode*>::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=<optimized out>)
    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=<optimized out>, no_builtins=<optimized out>, 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=<optimized out>, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120
#22 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=<optimized out>, diag_handler=<optimized out>, mtrans=..., config=<optimized out>, timeline=<optimized out>)
    at librustc_trans/back/write.rs:695
#23 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53ea374ef8, work_item=..., timeline=<optimized out>) 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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293
#28 std::panicking::try::do_call (data=<optimized out>) 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53dc001130, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
#35 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>

Thread 7:

<details>

```
(rr) thread 7
[Switching to thread 7 (Thread 31405.31432)]
#0  0x00007f53f07f7236 in llvm::DenseMapIterator<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*>, llvm::detail::DenseMapPair<void const*, llvm::Pass*>, true>::DenseMapIterator<false, void> (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<void const*, llvm::Pass*, llvm::DenseMapInfo<void const*>, llvm::detail::DenseMapPair<void const*, llvm::Pass*>, true>::DenseMapIterator<false, void> (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 <llvm::BasicAAWrapperPass::ID>, 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 <llvm::BasicAAWrapperPass::ID>)
    at /home/emilio/projects/moz/rust/src/llvm/lib/IR/LegacyPassManager.cpp:725
#3  0x00007f53f07f19cb in llvm::PMDataManager::findAnalysisPass (this=0x7f53d8001130, AID=0x7f53f3ff2a08 <llvm::BasicAAWrapperPass::ID>, 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=<optimized out>)
    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=<optimized out>, no_builtins=<optimized out>, 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=<optimized out>, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120
#16 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=<optimized out>, diag_handler=<optimized out>, mtrans=..., config=<optimized out>, timeline=<optimized out>)
    at librustc_trans/back/write.rs:695
#17 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53e9972ef8, work_item=..., timeline=<optimized out>) 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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293
#22 std::panicking::try::do_call (data=<optimized out>) 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53dc003260, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#29 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>

Thread 8:

<details>

```
(rr) thread 8
[Switching to thread 8 (Thread 31405.31435)]
#0  llvm::DenseMapBase<llvm::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::initEmpty (this=0x7f53cc025348) at /home/emilio/projects/moz/rust/src/llvm/include/llvm/ADT/DenseMap.h:347
#1  0x00007f53ee3b6cb7 in llvm::DenseMapBase<llvm::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::InsertIntoBucketImpl<unsigned int> (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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::InsertIntoBucket<unsigned int> (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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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::DenseMap<unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >, unsigned int, std::pair<unsigned short, unsigned short>, llvm::DenseMapInfo<unsigned int>, llvm::detail::DenseMapPair<unsigned int, std::pair<unsigned short, unsigned short> > >::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<llvm::X86Subtarget, llvm::Triple const&, llvm::StringRef&, llvm::StringRef&, llvm::X86TargetMachine const&, unsigned int&> (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=<optimized out>)
    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=<optimized out>, no_builtins=<optimized out>, 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=<optimized out>, what=..., f=...) at /home/emilio/projects/moz/rust/src/librustc/util/common.rs:120
#25 0x00007f53ede3086d in rustc_trans::back::write::codegen (cgcx=<optimized out>, diag_handler=<optimized out>, mtrans=..., config=<optimized out>, timeline=<optimized out>)
    at librustc_trans/back/write.rs:695
#26 0x00007f53ede37866 in rustc_trans::back::write::execute_work_item (cgcx=0x7f53e9471ef8, work_item=..., timeline=<optimized out>) 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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293
#31 std::panicking::try::do_call (data=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panicking.rs:479
#32 0x00007f5403df628f in __rust_maybe_catch_panic (f=0x7f53cc054668, data=0x4 <error: Cannot access memory at address 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53dc003dc0, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#38 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>

Thread 9:

<details>

```
(rr) bt
#0  0x00007f53ee416f36 in llvm::dyn_cast<llvm::InvokeInst, llvm::Instruction> (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<llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, 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<llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::BasicBlock, true, false, void>, 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=<optimized out>) at ../rustllvm/PassWrapper.cpp:478
#17 0x00007f53ede37614 in rustc_trans::back::write::optimize (diag_handler=<optimized out>, cgcx=<optimized out>, mtrans=<optimized out>, config=<optimized out>, timeline=<optimized out>)
    at librustc_trans/back/write.rs:569
#18 rustc_trans::back::write::execute_work_item (cgcx=0x7f53e8f70ef8, work_item=..., timeline=<optimized out>) 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 <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (self=..., _args=<optimized out>) at /home/emilio/projects/moz/rust/src/libstd/panic.rs:293
#23 std::panicking::try::do_call (data=<optimized out>) 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 <F as alloc::boxed::FnBox<A>>::call_box (self=0x7f53dc004920, args=<optimized out>) 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=<error reading variable: access outside bounds of object referenced via synthetic pointer>, args=<optimized out>)
    at /home/emilio/projects/moz/rust/src/liballoc/boxed.rs:798
#30 std::sys_common::thread::start_thread (main=<optimized out>) 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
```

</details>