Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIGSEGV when compiling for wasm #60540

Closed
bjorn3 opened this issue May 4, 2019 · 10 comments · Fixed by #60831
Closed

SIGSEGV when compiling for wasm #60540

bjorn3 opened this issue May 4, 2019 · 10 comments · Fixed by #60831
Assignees
Labels
A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. C-bug Category: This is a bug. I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics. I-unsound Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness O-wasm Target: WASM (WebAssembly), http://webassembly.org/ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@bjorn3
Copy link
Member

bjorn3 commented May 4, 2019

error: Could not compile `rustc_apfloat`.

Caused by:
  process didn't exit successfully: `rustc --edition=2018 --crate-name rustc_apfloat src/librustc_apfloat/lib.rs --color always --crate-type lib --emit=dep-info,link -C debug-assertions=off -C overflow-checks=on -C metadata=2ef9a21d83d05bfb -C extra-filename=-2ef9a21d83d05bfb --out-dir /Users/bjorn/Documents/rust-fork/target/wasm32-unknown-wasi/debug/deps --target wasm32-unknown-wasi -C incremental=/Users/bjorn/Documents/rust-fork/target/wasm32-unknown-wasi/debug/incremental -L dependency=/Users/bjorn/Documents/rust-fork/target/wasm32-unknown-wasi/debug/deps -L dependency=/Users/bjorn/Documents/rust-fork/target/debug/deps --extern bitflags=/Users/bjorn/Documents/rust-fork/target/wasm32-unknown-wasi/debug/deps/libbitflags-1fb0c073a5f72599.rlib --extern rustc_cratesio_shim=/Users/bjorn/Documents/rust-fork/target/wasm32-unknown-wasi/debug/deps/librustc_cratesio_shim-4e4d7cfa4cc9c9a6.rlib --extern smallvec=/Users/bjorn/Documents/rust-fork/target/wasm32-unknown-wasi/debug/deps/libsmallvec-62a7f15f3b8a6af3.rlib -Zforce-unstable-if-unmarked` (signal: 11, SIGSEGV: invalid memory reference)

Unfortunately I can't get a backtrace as running inside a debugger prevents it from crashing.

Reproduction:

Clone https://github.com/bjorn3/rust. Checkout commit 8c17e4aec8e187addf8fc187b64bd411a6038dea and follow the instructions on the top of the readme. Sometimes the execution succeeds, so you may have to remove the target dir when it succeeded.

@bjorn3
Copy link
Member Author

bjorn3 commented May 4, 2019

Got backtraces for all thread by loading a core dump:

(lldb) thread backtrace 1
* thread #1, stop reason = signal SIGSTOP
  * frame #0: 0x00007fff57f1c9de libsystem_kernel.dylib`__ulock_wait + 10
    frame #1: 0x00007fff57fd76de libsystem_pthread.dylib`_pthread_join + 358
    frame #2: 0x000000010f81f450 libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::join::h8564f5ef97632f26 + 16
    frame #3: 0x000000010b5873d2 librustc_driver-5e3149cfc076ab77.dylib`std::thread::JoinHandle$LT$T$GT$::join::h26734723f6318af8 + 66
    frame #4: 0x000000010b586276 librustc_driver-5e3149cfc076ab77.dylib`rustc_interface::util::spawn_thread_pool::h02c27e2fe510dc4b + 790
    frame #5: 0x000000010b5df84b librustc_driver-5e3149cfc076ab77.dylib`rustc_driver::run_compiler::hd6ffdb208b57cc57 + 5707
    frame #6: 0x000000010b58b661 librustc_driver-5e3149cfc076ab77.dylib`std::panicking::try::do_call::h7567d6ca86efb955 (.llvm.18415579661075415780) + 129
    frame #7: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #8: 0x000000010b5e5bd2 librustc_driver-5e3149cfc076ab77.dylib`rustc_driver::report_ices_to_stderr_if_any::h37fc09a37e4811ae + 66
    frame #9: 0x000000010b5e670e librustc_driver-5e3149cfc076ab77.dylib`rustc_driver::main::h31dcaa2e76b91ff3 + 14
    frame #10: 0x000000010b2ef566 rustc`std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h780d4c2ef30fb988 + 6
    frame #11: 0x000000010f810538 libstd-8d84a71a2f773b92.dylib`std::panicking::try::do_call::h5ee2775b0f32dc74 + 24
    frame #12: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #13: 0x000000010f81101e libstd-8d84a71a2f773b92.dylib`std::rt::lang_start_internal::h015bd3cd7004bd85 + 542
    frame #14: 0x000000010b2ef559 rustc`main + 41
    frame #15: 0x000000010b2ef514 rustc`start + 52
(lldb) thread backtrace 2
  thread #2, stop reason = signal SIGSTOP
    frame #0: 0x000000010dc5f7b0 librustc-bc7cc2f4f3a6e74f.dylib`rustc::ty::structural_impls::_$LT$impl$u20$rustc..ty..fold..TypeFoldable$u20$for$u20$$RF$rustc..ty..TyS$GT$::super_fold_with::hf3ecf83afe9cfa49
    frame #1: 0x000000010dce1421 librustc-bc7cc2f4f3a6e74f.dylib`rustc::ty::erase_regions::erase_regions_ty::h9420de1b0ed69b01 (.llvm.13950983945961193090) + 33
    frame #2: 0x000000010dc3973e librustc-bc7cc2f4f3a6e74f.dylib`rustc::dep_graph::graph::DepGraph::with_anon_task::h023efe6e23caccbb + 462
    frame #3: 0x000000010de900e9 librustc-bc7cc2f4f3a6e74f.dylib`rustc::ty::query::plumbing::_$LT$impl$u20$rustc..ty..context..TyCtxt$GT$::get_query::h5ab75c6b7dfa7cf8 + 2169
    frame #4: 0x00000001138725d5 librustc_codegen_llvm-llvm.dylib`_$LT$smallvec..SmallVec$LT$A$GT$$u20$as$u20$core..iter..traits..collect..FromIterator$LT$$LT$A$u20$as$u20$smallvec..Array$GT$..Item$GT$$GT$::from_iter::hb426e11935311c28 + 149
    frame #5: 0x0000000113804428 librustc_codegen_llvm-llvm.dylib`rustc::ty::fold::TypeFoldable::fold_with::h93155c485749e643 + 72
    frame #6: 0x000000011392f88c librustc_codegen_llvm-llvm.dylib`rustc::traits::query::normalize_erasing_regions::_$LT$impl$u20$rustc..ty..context..TyCtxt$GT$::normalize_erasing_late_bound_regions::h93cc59554af14e11 + 812
    frame #7: 0x0000000113841716 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::declare::_$LT$impl$u20$rustc_codegen_ssa..traits..declare..DeclareMethods$u20$for$u20$rustc_codegen_llvm..context..CodegenCx$GT$::declare_fn::h9d5ac91b83c9be90 + 86
    frame #8: 0x0000000113841de0 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::mono_item::_$LT$impl$u20$rustc_codegen_ssa..traits..declare..PreDefineMethods$u20$for$u20$rustc_codegen_llvm..context..CodegenCx$GT$::predefine_fn::h15caf8450555940e + 192
    frame #9: 0x000000011397fc0e librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::base::compile_codegen_unit::module_codegen::h22369ca0d54174b6 + 2462
    frame #10: 0x00000001138c23a4 librustc_codegen_llvm-llvm.dylib`rustc::dep_graph::graph::DepGraph::with_task::h24f1fc8005d9a75d + 468
    frame #11: 0x000000011397f133 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::base::compile_codegen_unit::h4cfec87dbb6367b3 + 227
    frame #12: 0x000000011384ed1e librustc_codegen_llvm-llvm.dylib`rustc_codegen_ssa::base::codegen_crate::h40331f24291424ce + 3774
    frame #13: 0x00000001138901a1 librustc_codegen_llvm-llvm.dylib`_$LT$rustc_codegen_llvm..LlvmCodegenBackend$u20$as$u20$rustc_codegen_utils..codegen_backend..CodegenBackend$GT$::codegen_crate::h1bc9127970393180 + 113
    frame #14: 0x000000010b7e406e librustc_interface-6ef349071c7b09f2.dylib`rustc::util::common::time::hceec4ddb46fc4c3a + 158
    frame #15: 0x000000010b73b7d5 librustc_interface-6ef349071c7b09f2.dylib`rustc_interface::passes::start_codegen::h8a57d37e47e58868 + 421
    frame #16: 0x000000010b7c4ec1 librustc_interface-6ef349071c7b09f2.dylib`rustc::ty::context::tls::enter_global::h8be9ffe8488f2b17 + 609
    frame #17: 0x000000010b73bee1 librustc_interface-6ef349071c7b09f2.dylib`rustc_interface::passes::BoxedGlobalCtxt::access::_$u7b$$u7b$closure$u7d$$u7d$::hcf82da4e158c37b8 + 129
    frame #18: 0x000000010b787b65 librustc_interface-6ef349071c7b09f2.dylib`rustc_interface::passes::create_global_ctxt::_$u7b$$u7b$closure$u7d$$u7d$::h903c09c70c254566 + 117
    frame #19: 0x000000010b73ab03 librustc_interface-6ef349071c7b09f2.dylib`rustc_interface::passes::BoxedGlobalCtxt::enter::hc5c007900b114061 + 147
    frame #20: 0x000000010b7cd0a5 librustc_interface-6ef349071c7b09f2.dylib`rustc_interface::queries::Query$LT$T$GT$::compute::h82fd0df60b59f057 + 437
    frame #21: 0x000000010b7b816c librustc_interface-6ef349071c7b09f2.dylib`rustc_interface::queries::_$LT$impl$u20$rustc_interface..interface..Compiler$GT$::ongoing_codegen::he9ecb6d5eb7f0dad + 28
    frame #22: 0x000000010b5ab859 librustc_driver-5e3149cfc076ab77.dylib`rustc_interface::interface::run_compiler_in_existing_thread_pool::hed5392ff52302c1d + 4009
    frame #23: 0x000000010b604a57 librustc_driver-5e3149cfc076ab77.dylib`std::thread::local::LocalKey$LT$T$GT$::with::h609091f75fe87ad8 + 279
    frame #24: 0x000000010b5d3096 librustc_driver-5e3149cfc076ab77.dylib`scoped_tls::ScopedKey$LT$T$GT$::set::h2a0845a5b4b13b2e + 518
    frame #25: 0x000000010b600703 librustc_driver-5e3149cfc076ab77.dylib`syntax::with_globals::h90417e911e4c0f10 + 83
    frame #26: 0x000000010b56f559 librustc_driver-5e3149cfc076ab77.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::h4f8be2a6d6d269f8 + 569
    frame #27: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #28: 0x000000010b588147 librustc_driver-5e3149cfc076ab77.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h69185ebc15a210c1 + 119
    frame #29: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #30: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #31: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #32: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #33: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 3
  thread #3, stop reason = signal SIGSTOP
    frame #0: 0x00007fff57f2236e libsystem_kernel.dylib`poll + 10
    frame #1: 0x000000010f6389f4 librustc_data_structures-77b6f90c54398a8c.dylib`jobserver::imp::Client::acquire::h623d23d7b92a4e22 + 68
    frame #2: 0x000000010f637560 librustc_data_structures-77b6f90c54398a8c.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::h99d3814a1806ad07 + 176
    frame #3: 0x000000010f636140 librustc_data_structures-77b6f90c54398a8c.dylib`std::panicking::try::do_call::h86f8d965769e44bd (.llvm.13933957308689913887) + 80
    frame #4: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #5: 0x000000010f636717 librustc_data_structures-77b6f90c54398a8c.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h570edcc8a145534f + 167
    frame #6: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #7: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #8: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #9: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #10: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 4
  thread #4, stop reason = signal SIGSTOP
    frame #0: 0x00007fff57f1d86a libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff57fd656e libsystem_pthread.dylib`_pthread_cond_wait + 722
    frame #2: 0x000000010f7f2f22 libstd-8d84a71a2f773b92.dylib`std::thread::park::hb4616f6052b47640 + 242
    frame #3: 0x000000010f809d61 libstd-8d84a71a2f773b92.dylib`std::sync::mpsc::blocking::WaitToken::wait::h0bb84fd816c7f43b + 49
    frame #4: 0x00000001138a8289 librustc_codegen_llvm-llvm.dylib`std::sync::mpsc::shared::Packet$LT$T$GT$::recv::hbbfcac3ba6afaf1a + 585
    frame #5: 0x0000000113855b91 librustc_codegen_llvm-llvm.dylib`std::sync::mpsc::Receiver$LT$T$GT$::recv::h57f739759d18fbde + 321
    frame #6: 0x0000000113973185 librustc_codegen_llvm-llvm.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::hef0265ead93bf37d + 4229
    frame #7: 0x0000000113855dcc librustc_codegen_llvm-llvm.dylib`std::panicking::try::do_call::h3485533b8b7a27bc (.llvm.371732380873419076) + 60
    frame #8: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #9: 0x00000001137ffbe6 librustc_codegen_llvm-llvm.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h0b553514d995afe7 + 134
    frame #10: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #11: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #12: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #13: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #14: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 5
  thread #5, stop reason = signal SIGSTOP
    frame #0: 0x0000000114bab33f librustc_codegen_llvm-llvm.dylib`llvm::MachineRegisterInfo::addRegOperandToUseList(llvm::MachineOperand*) + 63
    frame #1: 0x0000000114b3eeab librustc_codegen_llvm-llvm.dylib`llvm::MachineInstr::AddRegOperandsToUseLists(llvm::MachineRegisterInfo&) + 75
    frame #2: 0x0000000114af4c71 librustc_codegen_llvm-llvm.dylib`llvm::ilist_traits<llvm::MachineInstr>::addNodeToList(llvm::MachineInstr*) + 33
    frame #3: 0x0000000114835812 librustc_codegen_llvm-llvm.dylib`llvm::InstrEmitter::EmitMachineNode(llvm::SDNode*, bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::detail::DenseMapPair<llvm::SDValue, unsigned int> >&) + 1266
    frame #4: 0x00000001148c8b89 librustc_codegen_llvm-llvm.dylib`llvm::ScheduleDAGSDNodes::EmitSchedule(llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>&) + 1401
    frame #5: 0x0000000114967630 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 1760
    frame #6: 0x000000011496627d librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 9453
    frame #7: 0x0000000114963376 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 1782
    frame #8: 0x0000000114b3b3a9 librustc_codegen_llvm-llvm.dylib`llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 329
    frame #9: 0x0000000115457eb9 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnFunction(llvm::Function&) + 1177
    frame #10: 0x0000000115458153 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnModule(llvm::Module&) + 67
    frame #11: 0x0000000115458529 librustc_codegen_llvm-llvm.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 761
    frame #12: 0x00000001139840b8 librustc_codegen_llvm-llvm.dylib`LLVMRustWriteOutputFile + 568
    frame #13: 0x00000001138cfd36 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::write_output_file::h46c8b7792ec6c3bf (.llvm.14679628501088474520) + 86
    frame #14: 0x0000000113946cb7 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::_$u7b$$u7b$closure$u7d$$u7d$::h0a3d470f451a3cca (.llvm.12709569147983681104) + 983
    frame #15: 0x000000011393ccb0 librustc_codegen_llvm-llvm.dylib`rustc::util::common::time_ext::he76c8601a2e54611 + 80
    frame #16: 0x00000001138d2a0a librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::h1854c102d66890de + 2890
    frame #17: 0x0000000113846898 librustc_codegen_llvm-llvm.dylib`rustc_codegen_ssa::back::write::execute_work_item::h099f6feee3dc5c4f + 4744
    frame #18: 0x0000000113971f75 librustc_codegen_llvm-llvm.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::heb8aade351110442 + 181
    frame #19: 0x0000000113855e1b librustc_codegen_llvm-llvm.dylib`std::panicking::try::do_call::hc37c119df709ca26 (.llvm.371732380873419076) + 43
    frame #20: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #21: 0x00000001137ffdb6 librustc_codegen_llvm-llvm.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h89669d2534a37616 + 134
    frame #22: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #23: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #24: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #25: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #26: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 6
  thread #6, stop reason = signal SIGSTOP
    frame #0: 0x00000001156009f6 librustc_codegen_llvm-llvm.dylib`(anonymous namespace)::WasmObjectWriter::writeObject(llvm::MCAssembler&, llvm::MCAsmLayout const&) + 20838
    frame #1: 0x00000001155bb00e librustc_codegen_llvm-llvm.dylib`llvm::MCAssembler::Finish() + 62
    frame #2: 0x00000001149b4b5b librustc_codegen_llvm-llvm.dylib`llvm::AsmPrinter::doFinalization(llvm::Module&) + 6395
    frame #3: 0x0000000115458213 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::doFinalization(llvm::Module&) + 51
    frame #4: 0x0000000115458693 librustc_codegen_llvm-llvm.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 1123
    frame #5: 0x00000001139840b8 librustc_codegen_llvm-llvm.dylib`LLVMRustWriteOutputFile + 568
    frame #6: 0x00000001138cfd36 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::write_output_file::h46c8b7792ec6c3bf (.llvm.14679628501088474520) + 86
    frame #7: 0x0000000113946cb7 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::_$u7b$$u7b$closure$u7d$$u7d$::h0a3d470f451a3cca (.llvm.12709569147983681104) + 983
    frame #8: 0x000000011393ccb0 librustc_codegen_llvm-llvm.dylib`rustc::util::common::time_ext::he76c8601a2e54611 + 80
    frame #9: 0x00000001138d2a0a librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::h1854c102d66890de + 2890
    frame #10: 0x0000000113846898 librustc_codegen_llvm-llvm.dylib`rustc_codegen_ssa::back::write::execute_work_item::h099f6feee3dc5c4f + 4744
    frame #11: 0x0000000113971f75 librustc_codegen_llvm-llvm.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::heb8aade351110442 + 181
    frame #12: 0x0000000113855e1b librustc_codegen_llvm-llvm.dylib`std::panicking::try::do_call::hc37c119df709ca26 (.llvm.371732380873419076) + 43
    frame #13: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #14: 0x00000001137ffdb6 librustc_codegen_llvm-llvm.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h89669d2534a37616 + 134
    frame #15: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #16: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #17: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #18: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #19: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 7
  thread #7, stop reason = signal SIGSTOP
    frame #0: 0x00000001148bf331 librustc_codegen_llvm-llvm.dylib`(anonymous namespace)::ScheduleDAGRRList::PickNodeToScheduleBottomUp()::$_0::operator()() const + 33
    frame #1: 0x00000001148bbb45 librustc_codegen_llvm-llvm.dylib`(anonymous namespace)::ScheduleDAGRRList::Schedule() + 965
    frame #2: 0x000000011496759d librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 1613
    frame #3: 0x000000011496627d librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 9453
    frame #4: 0x0000000114963376 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 1782
    frame #5: 0x0000000114b3b3a9 librustc_codegen_llvm-llvm.dylib`llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 329
    frame #6: 0x0000000115457eb9 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnFunction(llvm::Function&) + 1177
    frame #7: 0x0000000115458153 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnModule(llvm::Module&) + 67
    frame #8: 0x0000000115458529 librustc_codegen_llvm-llvm.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 761
    frame #9: 0x00000001139840b8 librustc_codegen_llvm-llvm.dylib`LLVMRustWriteOutputFile + 568
    frame #10: 0x00000001138cfd36 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::write_output_file::h46c8b7792ec6c3bf (.llvm.14679628501088474520) + 86
    frame #11: 0x0000000113946cb7 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::_$u7b$$u7b$closure$u7d$$u7d$::h0a3d470f451a3cca (.llvm.12709569147983681104) + 983
    frame #12: 0x000000011393ccb0 librustc_codegen_llvm-llvm.dylib`rustc::util::common::time_ext::he76c8601a2e54611 + 80
    frame #13: 0x00000001138d2a0a librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::h1854c102d66890de + 2890
    frame #14: 0x0000000113846898 librustc_codegen_llvm-llvm.dylib`rustc_codegen_ssa::back::write::execute_work_item::h099f6feee3dc5c4f + 4744
    frame #15: 0x0000000113971f75 librustc_codegen_llvm-llvm.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::heb8aade351110442 + 181
    frame #16: 0x0000000113855e1b librustc_codegen_llvm-llvm.dylib`std::panicking::try::do_call::hc37c119df709ca26 (.llvm.371732380873419076) + 43
    frame #17: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #18: 0x00000001137ffdb6 librustc_codegen_llvm-llvm.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h89669d2534a37616 + 134
    frame #19: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #20: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #21: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #22: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #23: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 8
  thread #8, stop reason = signal SIGSTOP
    frame #0: 0x000000011492ddc5 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAG::getRegister(unsigned int, llvm::EVT) + 325
    frame #1: 0x00000001148ce7d5 librustc_codegen_llvm-llvm.dylib`llvm::RegsForValue::getCopyFromRegs(llvm::SelectionDAG&, llvm::FunctionLoweringInfo&, llvm::SDLoc const&, llvm::SDValue&, llvm::SDValue*, llvm::Value const*) const + 1509
    frame #2: 0x00000001148e5b52 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGBuilder::getValueImpl(llvm::Value const*) + 1442
    frame #3: 0x00000001148e54c7 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGBuilder::getValue(llvm::Value const*) + 231
    frame #4: 0x00000001148f2f62 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGBuilder::LowerCallTo(llvm::ImmutableCallSite, llvm::SDValue, bool, llvm::BasicBlock const*) + 450
    frame #5: 0x00000001148df3cf librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) + 415
    frame #6: 0x00000001148d3fb9 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) + 105
    frame #7: 0x0000000114966eb0 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) + 384
    frame #8: 0x0000000114965d92 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 8194
    frame #9: 0x0000000114963376 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 1782
    frame #10: 0x0000000114b3b3a9 librustc_codegen_llvm-llvm.dylib`llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 329
    frame #11: 0x0000000115457eb9 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnFunction(llvm::Function&) + 1177
    frame #12: 0x0000000115458153 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnModule(llvm::Module&) + 67
    frame #13: 0x0000000115458529 librustc_codegen_llvm-llvm.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 761
    frame #14: 0x00000001139840b8 librustc_codegen_llvm-llvm.dylib`LLVMRustWriteOutputFile + 568
    frame #15: 0x00000001138cfd36 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::write_output_file::h46c8b7792ec6c3bf (.llvm.14679628501088474520) + 86
    frame #16: 0x0000000113946cb7 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::_$u7b$$u7b$closure$u7d$$u7d$::h0a3d470f451a3cca (.llvm.12709569147983681104) + 983
    frame #17: 0x000000011393ccb0 librustc_codegen_llvm-llvm.dylib`rustc::util::common::time_ext::he76c8601a2e54611 + 80
    frame #18: 0x00000001138d2a0a librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::h1854c102d66890de + 2890
    frame #19: 0x0000000113846898 librustc_codegen_llvm-llvm.dylib`rustc_codegen_ssa::back::write::execute_work_item::h099f6feee3dc5c4f + 4744
    frame #20: 0x0000000113971f75 librustc_codegen_llvm-llvm.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::heb8aade351110442 + 181
    frame #21: 0x0000000113855e1b librustc_codegen_llvm-llvm.dylib`std::panicking::try::do_call::hc37c119df709ca26 (.llvm.371732380873419076) + 43
    frame #22: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #23: 0x00000001137ffdb6 librustc_codegen_llvm-llvm.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h89669d2534a37616 + 134
    frame #24: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #25: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #26: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #27: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #28: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13
(lldb) thread backtrace 9
  thread #9, stop reason = signal SIGSTOP
    frame #0: 0x0000000114883414 librustc_codegen_llvm-llvm.dylib`llvm::DAGTypeLegalizer::ReplaceValueWith(llvm::SDValue, llvm::SDValue) + 788
    frame #1: 0x0000000114897bcf librustc_codegen_llvm-llvm.dylib`llvm::DAGTypeLegalizer::ScalarizeVectorOperand(llvm::SDNode*, unsigned int) + 95
    frame #2: 0x0000000114882b84 librustc_codegen_llvm-llvm.dylib`llvm::DAGTypeLegalizer::run() + 1108
    frame #3: 0x0000000114887565 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAG::LegalizeTypes() + 1221
    frame #4: 0x00000001149670a6 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 342
    frame #5: 0x000000011496627d librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 9453
    frame #6: 0x0000000114963376 librustc_codegen_llvm-llvm.dylib`llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 1782
    frame #7: 0x0000000114b3b3a9 librustc_codegen_llvm-llvm.dylib`llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 329
    frame #8: 0x0000000115457eb9 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnFunction(llvm::Function&) + 1177
    frame #9: 0x0000000115458153 librustc_codegen_llvm-llvm.dylib`llvm::FPPassManager::runOnModule(llvm::Module&) + 67
    frame #10: 0x0000000115458529 librustc_codegen_llvm-llvm.dylib`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 761
    frame #11: 0x00000001139840b8 librustc_codegen_llvm-llvm.dylib`LLVMRustWriteOutputFile + 568
    frame #12: 0x00000001138cfd36 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::write_output_file::h46c8b7792ec6c3bf (.llvm.14679628501088474520) + 86
    frame #13: 0x0000000113946cb7 librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::_$u7b$$u7b$closure$u7d$$u7d$::h0a3d470f451a3cca (.llvm.12709569147983681104) + 983
    frame #14: 0x000000011393ccb0 librustc_codegen_llvm-llvm.dylib`rustc::util::common::time_ext::he76c8601a2e54611 + 80
    frame #15: 0x00000001138d2a0a librustc_codegen_llvm-llvm.dylib`rustc_codegen_llvm::back::write::codegen::h1854c102d66890de + 2890
    frame #16: 0x0000000113846898 librustc_codegen_llvm-llvm.dylib`rustc_codegen_ssa::back::write::execute_work_item::h099f6feee3dc5c4f + 4744
    frame #17: 0x0000000113971f75 librustc_codegen_llvm-llvm.dylib`std::sys_common::backtrace::__rust_begin_short_backtrace::heb8aade351110442 + 181
    frame #18: 0x0000000113855e1b librustc_codegen_llvm-llvm.dylib`std::panicking::try::do_call::hc37c119df709ca26 (.llvm.371732380873419076) + 43
    frame #19: 0x000000010f8205ef libstd-8d84a71a2f773b92.dylib`__rust_maybe_catch_panic + 31
    frame #20: 0x00000001137ffdb6 librustc_codegen_llvm-llvm.dylib`core::ops::function::FnOnce::call_once$u7b$$u7b$vtable.shim$u7d$$u7d$::h89669d2534a37616 + 134
    frame #21: 0x000000010f7f255e libstd-8d84a71a2f773b92.dylib`_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::hf374624fb08997e7 + 62
    frame #22: 0x000000010f81f3ae libstd-8d84a71a2f773b92.dylib`std::sys::unix::thread::Thread::new::thread_start::hfe8d238f75e9e68d + 142
    frame #23: 0x00007fff57fd32eb libsystem_pthread.dylib`_pthread_body + 126
    frame #24: 0x00007fff57fd6249 libsystem_pthread.dylib`_pthread_start + 66
    frame #25: 0x00007fff57fd240d libsystem_pthread.dylib`thread_start + 13

@jonas-schievink jonas-schievink added C-bug Category: This is a bug. I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics. O-wasm Target: WASM (WebAssembly), http://webassembly.org/ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels May 4, 2019
@bjorn3
Copy link
Member Author

bjorn3 commented May 4, 2019

After trying compiling it many times it does succeed, but the resulting wasm file is corrupt: CompileError: wasm validation error: at offset 10754426: type mismatch: expression has type i32 but expected i64. This may have the same cause, but I am not sure.

@Centril Centril added the I-unsound Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness label May 4, 2019
@Centril
Copy link
Contributor

Centril commented May 4, 2019

Based on ^-- I'm tentatively labeling as a soundness hole since it seems that type preservation is violated? (Haven't looked closely)

@bjorn3
Copy link
Member Author

bjorn3 commented May 4, 2019

Reduced repro:

$ rustc lib.rs --crate-type lib --target wasm32-unknown-wasi
lib.rs
#![allow(unused_variables)]

type ExpInt = i16;

type Limb = u128;

#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum Loss {
    ExactlyZero,
}

fn shift_left(dst: &mut [Limb], exp: &mut ExpInt, bits: usize) {
    loop {}
}

fn shift_right(dst: &mut [Limb], exp: &mut ExpInt, bits: usize) -> Loss {
    loop {}
}

fn sub(a: &mut [Limb], b: &[Limb], c: Limb) -> Limb {
    loop {}
}

pub fn add_or_sub(
    a_sig: &mut [Limb],
    a_exp: &mut ExpInt,
    a_sign: &mut bool,
    b_sig: &mut [Limb],
    b_exp: ExpInt,
    b_sign: bool,
) {
    let bits = *a_exp - b_exp;

    let (reverse, loss);

    if bits == 0 {
        loop {}
    } else if bits > 0 {
        loss = shift_right(b_sig, &mut 0, (bits - 1) as usize);
        shift_left(a_sig, a_exp, 1);
        reverse = false;
    } else {
        loss = shift_right(a_sig, a_exp, (-bits - 1) as usize);
        shift_left(b_sig, &mut 0, 1);
        reverse = true;
    }

    let borrow = (loss != Loss::ExactlyZero) as Limb;
    if reverse {
        assert_eq!(sub(b_sig, a_sig, borrow), 0);
    }
}

Edit: Reduced it even more.

@RReverser
Copy link
Contributor

After trying compiling it many times it does succeed, but the resulting wasm file is corrupt: CompileError: wasm validation error: at offset 10754426: type mismatch: expression has type i32 but expected i64.

I've got a bit more specific one from Node.js:

Compiling wasm function "_ZN13rustc_apfloat4ieee3sig10add_or_sub17h689652bf7b374061E" failed: call[6] expected type i64, found get_local of type i32 @+139682661

@nikic
Copy link
Contributor

nikic commented May 11, 2019

LLVM IR for @bjorn3's reproducer: https://gist.github.com/nikic/fb45d54844f6feb698a309418e948866

Running this through llc -O0 against current LLVM master gives the following assertion failure:

llc: ../include/llvm/ADT/IndexedMap.h:46: typename llvm::IndexedMap<T, ToIndexT>::StorageT::reference llvm::IndexedMap<T, ToIndexT>::operator[](llvm::IndexedMap<T, ToIndexT>::IndexT) [with T = std::pair<llvm::PointerUnion<const llvm::TargetRegisterClass*, const llvm::RegisterBank*>, llvm::MachineOperand*>; ToIndexT = llvm::VirtReg2IndexFunctor; typename llvm::IndexedMap<T, ToIndexT>::StorageT::reference = std::pair<llvm::PointerUnion<const llvm::TargetRegisterClass*, const llvm::RegisterBank*>, llvm::MachineOperand*>&; llvm::IndexedMap<T, ToIndexT>::IndexT = unsigned int]: Assertion `toIndex_(n) < storage_.size() && "index out of bounds!"' failed.

With backtrace:

#4  0x00007ffff3ac4a2f in llvm::IndexedMap<std::pair<llvm::PointerUnion<llvm::TargetRegisterClass const*, llvm::RegisterBank const*>, llvm::MachineOperand*>, llvm::VirtReg2IndexFunctor>::operator[] (
    this=0x555555698da8, n=2147483767) at ../include/llvm/ADT/IndexedMap.h:46
#5  0x00007ffff3ac4732 in llvm::MachineRegisterInfo::getRegUseDefListHead (this=0x555555698d90, 
    RegNo=2147483767) at ../include/llvm/CodeGen/MachineRegisterInfo.h:112
#6  0x00007ffff3ac2b4e in llvm::MachineRegisterInfo::addRegOperandToUseList (this=0x555555698d90, 
    MO=0x5555556bfd28) at ../lib/CodeGen/MachineRegisterInfo.cpp:267
#7  0x00007ffff3a05cec in llvm::MachineInstr::AddRegOperandsToUseLists (this=0x5555556bfa80, 
    MRI=...) at ../lib/CodeGen/MachineInstr.cpp:173
#8  0x00007ffff3962fee in llvm::ilist_traits<llvm::MachineInstr>::addNodeToList (
    this=0x5555556b45a8, N=0x5555556bfa80) at ../lib/CodeGen/MachineBasicBlock.cpp:111
#9  0x00007ffff17fa589 in llvm::iplist_impl<llvm::simple_ilist<llvm::MachineInstr, llvm::ilist_sentinel_tracking<true> >, llvm::ilist_traits<llvm::MachineInstr> >::insert (this=0x5555556b45a8, 
    where=..., New=0x5555556bfa80) at ../include/llvm/ADT/ilist.h:227
#10 0x00007ffff17f6674 in llvm::MachineBasicBlock::insert (this=0x5555556b4598, I=..., 
    MI=0x5555556bfa80) at ../include/llvm/CodeGen/MachineBasicBlock.h:627
#11 0x00007ffff18244e0 in llvm::InstrEmitter::EmitMachineNode (this=0x7fffffffc5d0, 
    Node=0x5555556a5960, IsClone=false, IsCloned=false, VRBaseMap=...)
    at ../lib/CodeGen/SelectionDAG/InstrEmitter.cpp:927
#12 0x00007ffff18d1c53 in llvm::InstrEmitter::EmitNode (this=0x7fffffffc5d0, Node=0x5555556a5960, 
    IsClone=false, IsCloned=false, VRBaseMap=...) at ../lib/CodeGen/SelectionDAG/InstrEmitter.h:123
#13 0x00007ffff18f01d7 in llvm::ScheduleDAGSDNodes::<lambda(llvm::SDNode*, bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::detail::DenseMapPair<llvm::SDValue, unsigned int> >&)>::operator()(llvm::SDNode *, bool, bool, llvm::DenseMap<llvm::SDValue, unsigned int, llvm::DenseMapInfo<llvm::SDValue>, llvm::detail::DenseMapPair<llvm::SDValue, unsigned int> > &) const (__closure=0x7fffffffc580, Node=0x5555556a5960, IsClone=false, IsCloned=false, 
    VRBaseMap=...) at ../lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:849
#14 0x00007ffff18f07ab in llvm::ScheduleDAGSDNodes::EmitSchedule (this=0x5555556bb620, 
    InsertPos=...) at ../lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp:909
#15 0x00007ffff19de0e5 in llvm::SelectionDAGISel::CodeGenAndEmitDAG (this=0x555555656b60)
    at ../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:968
#16 0x00007ffff19dc5b0 in llvm::SelectionDAGISel::SelectBasicBlock (this=0x555555656b60, 
    Begin=..., End=..., HadTailCall=@0x7fffffffcb90: false)
    at ../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:698
#17 0x00007ffff19e2336 in llvm::SelectionDAGISel::SelectAllBasicBlocks (this=0x555555656b60, 
    Fn=...) at ../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1814
#18 0x00007ffff19db2ae in llvm::SelectionDAGISel::runOnMachineFunction (this=0x555555656b60, 
    mf=...) at ../lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:496
#19 0x00007ffff55206e1 in (anonymous namespace)::WebAssemblyDAGToDAGISel::runOnMachineFunction (
    this=0x555555656b60, MF=...) at ../lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp:56
#20 0x00007ffff3a01d09 in llvm::MachineFunctionPass::runOnFunction (this=0x555555656b60, F=...)
    at ../lib/CodeGen/MachineFunctionPass.cpp:73
#21 0x00007ffff2e8ff10 in llvm::FPPassManager::runOnFunction (this=0x555555656430, F=...)
    at ../lib/IR/LegacyPassManager.cpp:1648
#22 0x00007ffff2e90201 in llvm::FPPassManager::runOnModule (this=0x555555656430, M=...)
    at ../lib/IR/LegacyPassManager.cpp:1685

@nikic nikic added the A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. label May 11, 2019
@nikic
Copy link
Contributor

nikic commented May 11, 2019

Reduced test case:

target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"

declare i128 @foo(i128)

define void @test(i1 %b) {
start:
  %zext = zext i1 %b to i128
  br label %next

next:                                             ; preds = %start
  %ret = call i128 @foo(i128 %zext)
  ret void 
} 

@nikic
Copy link
Contributor

nikic commented May 11, 2019

Upstream report: https://bugs.llvm.org/show_bug.cgi?id=41841

@nikic nikic self-assigned this May 11, 2019
@nikic
Copy link
Contributor

nikic commented May 13, 2019

Fixed upstream: llvm/llvm-project@323dc63

alexcrichton added a commit to alexcrichton/rust that referenced this issue May 14, 2019
@alexcrichton
Copy link
Member

Thanks so much @nikic for tracking that down and fixing it! I've opened an update of our submodule at #60831

Centril added a commit to Centril/rust that referenced this issue May 15, 2019
…=nikic

Update LLVM to fix assertion when compiling to wasm

More details can be found in rust-lang#60540!

Closes rust-lang#60540
bors added a commit that referenced this issue May 15, 2019
Update LLVM to fix assertion when compiling to wasm

More details can be found in #60540!

Closes #60540
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. C-bug Category: This is a bug. I-crash Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics. I-unsound Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness O-wasm Target: WASM (WebAssembly), http://webassembly.org/ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants