The codegen backend gets invoked even when we just generate MIR
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
I tried this code
#![allow(incomplete_features)]
#![feature(explicit_tail_calls)]
fn test() {
}
fn main() {
become test()
}
with rustc +nightly --emit=mir become.rs I expect this to just produce MIR. Instead, it ICEs:
error: internal compiler error: /rustc/176e5452095444815207be02c16de0b1487a1b53/compiler/rustc_codegen_ssa/src/mir/block.rs:1392:17: `TailCall` terminator is not yet supported by `rustc_codegen_ssa`
--> become.rs:9:5
|
9 | become test()
| ^^^^^^^^^^^^^
thread 'rustc' panicked at /rustc/176e5452095444815207be02c16de0b1487a1b53/compiler/rustc_codegen_ssa/src/mir/block.rs:1392:17:
Box<dyn Any>
stack backtrace:
0: 0x7f8cc53d0f4d - std::backtrace_rs::backtrace::libunwind::trace::hddaf846e242943b6
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
1: 0x7f8cc53d0f4d - std::backtrace_rs::backtrace::trace_unsynchronized::hcd3688bf14d1cca6
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x7f8cc53d0f4d - std::sys::backtrace::_print_fmt::h02af5cd6c4544f01
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/sys/backtrace.rs:66:9
3: 0x7f8cc53d0f4d - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h4f9f0817e56b2800
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/sys/backtrace.rs:39:26
4: 0x7f8cc542163b - core::fmt::rt::Argument::fmt::hcad5edb9a0541baa
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/core/src/fmt/rt.rs:173:76
5: 0x7f8cc542163b - core::fmt::write::h8555e7462120c82b
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/core/src/fmt/mod.rs:1178:21
6: 0x7f8cc53c4cb3 - std::io::Write::write_fmt::h88e8d425fe2e683c
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/io/mod.rs:1823:15
7: 0x7f8cc53d3742 - std::sys::backtrace::BacktraceLock::print::h8e59a45eca996cf4
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/sys/backtrace.rs:42:9
8: 0x7f8cc53d3742 - std::panicking::default_hook::{{closure}}::h594c38f77836119c
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/panicking.rs:266:22
9: 0x7f8cc53d33ae - std::panicking::default_hook::hccd160a0a5d55adf
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/panicking.rs:293:9
10: 0x7f8cc1896677 - std[c4314996310caec6]::panicking::update_hook::<alloc[337169187422bdd4]::boxed::Box<rustc_driver_impl[6f1f866cc0168980]::install_ice_hook::{closure#0}>>::{closure#0}
11: 0x7f8cc53d4132 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h329701e142ea769a
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/alloc/src/boxed.rs:2164:9
12: 0x7f8cc53d4132 - std::panicking::rust_panic_with_hook::he59475a651e09a8f
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/panicking.rs:805:13
13: 0x7f8cc18d1b41 - std[c4314996310caec6]::panicking::begin_panic::<rustc_errors[df59a31ecd01c26]::ExplicitBug>::{closure#0}
14: 0x7f8cc18c4856 - std[c4314996310caec6]::sys::backtrace::__rust_end_short_backtrace::<std[c4314996310caec6]::panicking::begin_panic<rustc_errors[df59a31ecd01c26]::ExplicitBug>::{closure#0}, !>
15: 0x7f8cc18c4806 - std[c4314996310caec6]::panicking::begin_panic::<rustc_errors[df59a31ecd01c26]::ExplicitBug>
16: 0x7f8cc18dadb1 - <rustc_errors[df59a31ecd01c26]::diagnostic::BugAbort as rustc_errors[df59a31ecd01c26]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
17: 0x7f8cc16da84d - <rustc_errors[df59a31ecd01c26]::DiagCtxtHandle>::span_bug::<rustc_span[e39f355f3aad4b6e]::span_encoding::Span, alloc[337169187422bdd4]::string::String>
18: 0x7f8cc16fc378 - rustc_middle[e06012d79be9a3f]::util::bug::opt_span_bug_fmt::<rustc_span[e39f355f3aad4b6e]::span_encoding::Span>::{closure#0}
19: 0x7f8cc16fc43a - rustc_middle[e06012d79be9a3f]::ty::context::tls::with_opt::<rustc_middle[e06012d79be9a3f]::util::bug::opt_span_bug_fmt<rustc_span[e39f355f3aad4b6e]::span_encoding::Span>::{closure#0}, !>::{closure#0}
20: 0x7f8cc16ecd5b - rustc_middle[e06012d79be9a3f]::ty::context::tls::with_context_opt::<rustc_middle[e06012d79be9a3f]::ty::context::tls::with_opt<rustc_middle[e06012d79be9a3f]::util::bug::opt_span_bug_fmt<rustc_span[e39f355f3aad4b6e]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
21: 0x7f8cc16ec577 - rustc_middle[e06012d79be9a3f]::util::bug::span_bug_fmt::<rustc_span[e39f355f3aad4b6e]::span_encoding::Span>
22: 0x7f8cc3cf31b8 - rustc_codegen_ssa[7773436e0ac6c0fa]::mir::codegen_mir::<rustc_codegen_llvm[b31d612c732226ef]::builder::Builder>
23: 0x7f8cc3cc70d7 - rustc_codegen_llvm[b31d612c732226ef]::base::compile_codegen_unit::module_codegen
24: 0x7f8cc3cc4282 - <rustc_codegen_llvm[b31d612c732226ef]::LlvmCodegenBackend as rustc_codegen_ssa[7773436e0ac6c0fa]::traits::backend::ExtraBackendMethods>::compile_codegen_unit
25: 0x7f8cc3e500a6 - <rustc_codegen_llvm[b31d612c732226ef]::LlvmCodegenBackend as rustc_codegen_ssa[7773436e0ac6c0fa]::traits::backend::CodegenBackend>::codegen_crate
26: 0x7f8cc3eb20d8 - <rustc_interface[fe42c70767b6e180]::queries::Linker>::codegen_and_build_linker
27: 0x7f8cc3c8dbd3 - rustc_interface[fe42c70767b6e180]::interface::run_compiler::<core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>, rustc_driver_impl[6f1f866cc0168980]::run_compiler::{closure#0}>::{closure#1}
28: 0x7f8cc3c33a09 - std[c4314996310caec6]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[fe42c70767b6e180]::util::run_in_thread_with_globals<rustc_interface[fe42c70767b6e180]::util::run_in_thread_pool_with_globals<rustc_interface[fe42c70767b6e180]::interface::run_compiler<core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>, rustc_driver_impl[6f1f866cc0168980]::run_compiler::{closure#0}>::{closure#1}, core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>>::{closure#0}, core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>>
29: 0x7f8cc3c337b2 - <<std[c4314996310caec6]::thread::Builder>::spawn_unchecked_<rustc_interface[fe42c70767b6e180]::util::run_in_thread_with_globals<rustc_interface[fe42c70767b6e180]::util::run_in_thread_pool_with_globals<rustc_interface[fe42c70767b6e180]::interface::run_compiler<core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>, rustc_driver_impl[6f1f866cc0168980]::run_compiler::{closure#0}>::{closure#1}, core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>>::{closure#0}, core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[83bad7981a5dd158]::result::Result<(), rustc_span[e39f355f3aad4b6e]::ErrorGuaranteed>>::{closure#1} as core[83bad7981a5dd158]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
30: 0x7f8cc53dde4b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hc39ab0f6d5b6300a
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/alloc/src/boxed.rs:2150:9
31: 0x7f8cc53dde4b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h516fb9fcf7cbba8c
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/alloc/src/boxed.rs:2150:9
32: 0x7f8cc53dde4b - std::sys::pal::unix::thread::Thread::new::thread_start::h5a12be27e50b2045
at /rustc/176e5452095444815207be02c16de0b1487a1b53/library/std/src/sys/pal/unix/thread.rs:105:17
33: 0x7f8cbe2a36c2 - start_thread
at ./nptl/pthread_create.c:447:8
34: 0x7f8cbe31e128 - clone3
at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
35: 0x0 - <unknown>
This is very strange since the codegen backend should not even be invoked here -- I asked only for MIR, not for LLVM IR or a compiled binary.
--emit=metadata succeeds, so rustc is able to not call codegen... it just strangely decides to call codegen with --emit=mir, it seems?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue with the shown rustc +nightly --emit=mir example and compare it with --emit=metadata. Trace the emission path into compiler/rustc_codegen_ssa/src/mir/block.rs, where the TailCall ICE occurs. Done means MIR generation no longer invokes codegen or ICEs, while the existing MIR output remains available.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100