"Found unstable fingerprints for optimized_mir" ICE when moving a dot in a method call chain between lines within a function with an `impl Trait` parameter
Open
@cjgillot is already working on this.
Since Dec 29, 2023.
A-incr-comp
C-bug
I-ICE
S-has-mcve
T-compiler
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
Related to #84970.
Code
Filename: main.rs
fn main() {
ice_repro::foo("foo");
}
Filename: lib.rs
pub fn foo(_: impl std::fmt::Display) {
let _ = "bar".trim().
trim();
}
At this point run cargo build, which should work fine. Then move the trailing dot in line 2 like this:
Filename: lib.rs
pub fn foo(_: impl std::fmt::Display) {
let _ = "bar".trim()
.trim();
}
Now run cargo build and observe the ICE.
Some relevant observations:
- Having both functions in main.rs doesn't work;
foo()needs to be in lib.rs or in a deeper module. Having both in lib.rs also doesn't work. - The
impl Traitparameter is necessary (there's no ICE without it), and any trait seems to work. - The particular methods and types in
foo()don't seem to matter; the key is that there's a chain of method calls on separate lines and that a dot is moved from trailing position in line n to leading position in line n + 1 or vice versa.
Meta
rustc --version --verbose:
rustc 1.74.1 (a28077b28 2023-12-04)
binary: rustc
commit-hash: a28077b28a02b92985b3a3faecf92813155f1ea1
commit-date: 2023-12-04
host: x86_64-unknown-linux-gnu
release: 1.74.1
LLVM version: 17.0.4
Also reproduced on nightly:
rustc 1.77.0-nightly (bf8716f1c 2023-12-24)
binary: rustc
commit-hash: bf8716f1cd6416266807706bcae0ecb2e51c9d4a
commit-date: 2023-12-24
host: x86_64-unknown-linux-gnu
release: 1.77.0-nightly
LLVM version: 17.0.6
Error output
Output + backtrace
% cargo build
Compiling ice-repro v0.1.0 (/home/liudvikas/Code/rust/ice-repro)
error: internal compiler error: encountered incremental compilation error with optimized_mir(ice_repro[ed7c]::foo)
|
= help: This is a known issue with the compiler. Run `cargo clean -p ice_repro` or `cargo clean` to allow your project to compile
= note: Please follow the instructions below to create a bug report with the provided information
= note: See <https://github.com/rust-lang/rust/issues/84970> for more information
thread 'rustc' panicked at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/compiler/rustc_query_system/src/query/plumbing.rs:711:9:
Found unstable fingerprints for optimized_mir(ice_repro[ed7c]::foo): Body { basic_blocks: BasicBlocks { basic_blocks: [BasicBlockData { statements: [_5 = const "bar"], terminator: Some(Terminator { source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:13: 2:25 (#0), scope: scope[0] }, kind: _4 = core::str::<impl str>::trim(_5) -> [return: bb1, unwind: bb4] }), is_cleanup: false }, BasicBlockData { statements: [_3 = _4], terminator: Some(Terminator { source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:13: 3:16 (#0), scope: scope[0] }, kind: _2 = core::str::<impl str>::trim(move _3) -> [return: bb2, unwind: bb4] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:4:1: 4:2 (#0), scope: scope[0] }, kind: drop(_1) -> [return: bb3, unwind continue] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:4:2: 4:2 (#0), scope: scope[0] }, kind: return }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:4:1: 4:2 (#0), scope: scope[0] }, kind: drop(_1) -> [return: bb5, unwind terminate(cleanup)] }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:1:1: 4:2 (#0), scope: scope[0] }, kind: resume }), is_cleanup: true }], cache: Cache { predecessors: OnceCell(<uninit>), switch_sources: OnceCell(<uninit>), is_cyclic: OnceCell(<uninit>), reverse_postorder: OnceCell(<uninit>), dominators: OnceCell(<uninit>) } }, phase: Runtime(Optimized), pass_count: 1, source: MirSource { instance: Item(DefId(20:3 ~ ice_repro[ed7c]::foo)), promoted: None }, source_scopes: [SourceScopeData { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:1:1: 4:2 (#0), parent_scope: None, inlined: None, inlined_parent_scope: None, local_data: Clear }, SourceScopeData { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:5: 4:2 (#0), parent_scope: Some(scope[0]), inlined: None, inlined_parent_scope: None, local_data: Clear }], generator: None, local_decls: [LocalDecl { mutability: Mut, local_info: Clear, internal: false, ty: (), user_ty: None, source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:1:39: 1:39 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: Clear, internal: false, ty: impl std::fmt::Display/#0, user_ty: None, source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:1:12: 1:13 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: Clear, internal: false, ty: &ReErased str, user_ty: None, source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:13: 3:16 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: Clear, internal: false, ty: &ReErased str, user_ty: None, source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:13: 2:25 (#0), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Clear, internal: false, ty: &ReErased str, user_ty: None, source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:13: 2:25 (#0), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Clear, internal: false, ty: &ReErased str, user_ty: None, source_info: SourceInfo { span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:2:13: 2:18 (#0), scope: scope[0] } }], user_type_annotations: [], arg_count: 1, spread_arg: None, var_debug_info: [], span: /home/liudvikas/Code/rust/ice-repro/src/lib.rs:1:1: 4:2 (#0), required_consts: [], is_polymorphic: true, injection_phase: None, tainted_by_errors: None }
stack backtrace:
0: 0x7fada7f6433c - std::backtrace_rs::backtrace::libunwind::trace::ha69d38c49f1bf263
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x7fada7f6433c - std::backtrace_rs::backtrace::trace_unsynchronized::h93125d0b85fd543c
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x7fada7f6433c - std::sys_common::backtrace::_print_fmt::h8d65f438e8343444
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/sys_common/backtrace.rs:67:5
3: 0x7fada7f6433c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h41751d2af6c8033a
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/sys_common/backtrace.rs:44:22
4: 0x7fada7fc9f9c - core::fmt::rt::Argument::fmt::h5db2f552d8a28f63
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/fmt/rt.rs:138:9
5: 0x7fada7fc9f9c - core::fmt::write::h99465148a27e4883
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/fmt/mod.rs:1114:21
6: 0x7fada7f570be - std::io::Write::write_fmt::hee8dfd57bd179ab2
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/io/mod.rs:1763:15
7: 0x7fada7f64124 - std::sys_common::backtrace::_print::h019a3cee3e814da4
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/sys_common/backtrace.rs:47:5
8: 0x7fada7f64124 - std::sys_common::backtrace::print::h55694121c2ddf918
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/sys_common/backtrace.rs:34:9
9: 0x7fada7f67003 - std::panicking::default_hook::{{closure}}::h29cbe3da3891b0b0
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:272:22
10: 0x7fada7f66d24 - std::panicking::default_hook::h881e76b2b8c74280
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:292:9
11: 0x7fadab11115f - std[afc0969a1e8d0069]::panicking::update_hook::<alloc[8b5739118bbd196f]::boxed::Box<rustc_driver_impl[edf179010582d687]::install_ice_hook::{closure#0}>>::{closure#0}
12: 0x7fada7f67831 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hdafd71b4fdf5de15
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/alloc/src/boxed.rs:2021:9
13: 0x7fada7f67831 - std::panicking::rust_panic_with_hook::hcc36e25b6e33969c
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:735:13
14: 0x7fada7f675b1 - std::panicking::begin_panic_handler::{{closure}}::ha415efb0f69f41f9
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:609:13
15: 0x7fada7f64866 - std::sys_common::backtrace::__rust_end_short_backtrace::h395fe90f99451e4e
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/sys_common/backtrace.rs:170:18
16: 0x7fada7f67302 - rust_begin_unwind
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/panicking.rs:597:5
17: 0x7fada7fc6625 - core::panicking::panic_fmt::h452a83e54ecd764e
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/core/src/panicking.rs:72:14
18: 0x7fadab9db3c8 - rustc_query_system[38ffe91b6b23055d]::query::plumbing::incremental_verify_ich_failed::<rustc_middle[9d619393e8ff4f31]::ty::context::TyCtxt>.2152
19: 0x7fada9d423da - rustc_query_system[38ffe91b6b23055d]::query::plumbing::try_execute_query::<rustc_query_impl[2832811689f625f6]::DynamicConfig<rustc_query_system[38ffe91b6b23055d]::query::caches::DefaultCache<rustc_span[16fed22730bc75c0]::def_id::DefId, rustc_middle[9d619393e8ff4f31]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[2832811689f625f6]::plumbing::QueryCtxt, true>
20: 0x7fadaaa5d52b - rustc_query_impl[2832811689f625f6]::query_impl::optimized_mir::get_query_incr::__rust_end_short_backtrace
21: 0x7fada97029c4 - <rustc_middle[9d619393e8ff4f31]::ty::context::TyCtxt>::instance_mir
22: 0x7fada9ed2522 - rustc_monomorphize[4949fb4b01b29ff1]::collector::collect_used_items
23: 0x7fada9ecf905 - rustc_monomorphize[4949fb4b01b29ff1]::collector::collect_items_rec
24: 0x7fada9ecfdf4 - rustc_monomorphize[4949fb4b01b29ff1]::collector::collect_items_rec
25: 0x7fadaa5e72d8 - rustc_data_structures[96d7b101533d65de]::sync::parallel::disabled::par_for_each_in::<alloc[8b5739118bbd196f]::vec::Vec<rustc_middle[9d619393e8ff4f31]::mir::mono::MonoItem>, rustc_monomorphize[4949fb4b01b29ff1]::collector::collect_crate_mono_items::{closure#1}::{closure#0}>
26: 0x7fadaa5e6670 - <rustc_session[c6557f37e70f1e4]::session::Session>::time::<(), rustc_monomorphize[4949fb4b01b29ff1]::collector::collect_crate_mono_items::{closure#1}>
27: 0x7fadaa5e62b8 - rustc_monomorphize[4949fb4b01b29ff1]::collector::collect_crate_mono_items
28: 0x7fadaa5e4888 - rustc_monomorphize[4949fb4b01b29ff1]::partitioning::collect_and_partition_mono_items
29: 0x7fadaa6f72d9 - rustc_query_impl[2832811689f625f6]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[2832811689f625f6]::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2}::{closure#0}, rustc_middle[9d619393e8ff4f31]::query::erase::Erased<[u8; 24usize]>>
30: 0x7fadaa6f72ad - <rustc_query_impl[2832811689f625f6]::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2} as core[e044522c7ef2d325]::ops::function::FnOnce<(rustc_middle[9d619393e8ff4f31]::ty::context::TyCtxt, ())>>::call_once
31: 0x7fadaa8e8c3f - rustc_query_system[38ffe91b6b23055d]::query::plumbing::try_execute_query::<rustc_query_impl[2832811689f625f6]::DynamicConfig<rustc_query_system[38ffe91b6b23055d]::query::caches::SingleCache<rustc_middle[9d619393e8ff4f31]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[2832811689f625f6]::plumbing::QueryCtxt, true>
32: 0x7fadaaa7944b - rustc_query_impl[2832811689f625f6]::query_impl::collect_and_partition_mono_items::get_query_incr::__rust_end_short_backtrace
33: 0x7fadaa2927fb - rustc_codegen_ssa[6c532c925ba7d7b6]::base::codegen_crate::<rustc_codegen_llvm[cec41227985bab51]::LlvmCodegenBackend>
34: 0x7fadaa2925ff - <rustc_codegen_llvm[cec41227985bab51]::LlvmCodegenBackend as rustc_codegen_ssa[6c532c925ba7d7b6]::traits::backend::CodegenBackend>::codegen_crate
35: 0x7fadaa6532a2 - <rustc_session[c6557f37e70f1e4]::session::Session>::time::<alloc[8b5739118bbd196f]::boxed::Box<dyn core[e044522c7ef2d325]::any::Any>, rustc_interface[250c7deb490bcc66]::passes::start_codegen::{closure#0}>
36: 0x7fadaa652dfb - rustc_interface[250c7deb490bcc66]::passes::start_codegen
37: 0x7fadaa64d9ba - <rustc_middle[9d619393e8ff4f31]::ty::context::GlobalCtxt>::enter::<<rustc_interface[250c7deb490bcc66]::queries::Queries>::ongoing_codegen::{closure#0}, core[e044522c7ef2d325]::result::Result<alloc[8b5739118bbd196f]::boxed::Box<dyn core[e044522c7ef2d325]::any::Any>, rustc_span[16fed22730bc75c0]::ErrorGuaranteed>>
38: 0x7fadaa64c51d - rustc_span[16fed22730bc75c0]::set_source_map::<core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>, rustc_interface[250c7deb490bcc66]::interface::run_compiler<core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>, rustc_driver_impl[edf179010582d687]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
39: 0x7fadaa646750 - std[afc0969a1e8d0069]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[250c7deb490bcc66]::util::run_in_thread_with_globals<rustc_interface[250c7deb490bcc66]::interface::run_compiler<core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>, rustc_driver_impl[edf179010582d687]::run_compiler::{closure#1}>::{closure#0}, core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>>
40: 0x7fadaa64605e - <<std[afc0969a1e8d0069]::thread::Builder>::spawn_unchecked_<rustc_interface[250c7deb490bcc66]::util::run_in_thread_with_globals<rustc_interface[250c7deb490bcc66]::interface::run_compiler<core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>, rustc_driver_impl[edf179010582d687]::run_compiler::{closure#1}>::{closure#0}, core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e044522c7ef2d325]::result::Result<(), rustc_span[16fed22730bc75c0]::ErrorGuaranteed>>::{closure#1} as core[e044522c7ef2d325]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
41: 0x7fada7f72395 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h51435299acd7166e
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/alloc/src/boxed.rs:2007:9
42: 0x7fada7f72395 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h3f833c0a4926bdd4
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/alloc/src/boxed.rs:2007:9
43: 0x7fada7f72395 - std::sys::unix::thread::Thread::new::thread_start::h2c486d0230ab0d99
at /rustc/a28077b28a02b92985b3a3faecf92813155f1ea1/library/std/src/sys/unix/thread.rs:108:17
44: 0x7fada7d129eb - <unknown>
45: 0x7fada7d967cc - <unknown>
46: 0x0 - <unknown>
error: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md
note: rustc 1.74.1 (a28077b28 2023-12-04) running on x86_64-unknown-linux-gnu
note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 -C incremental=[REDACTED]
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [optimized_mir] optimizing MIR for `ice_repro::foo`
#1 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack
error: could not compile `ice-repro` (bin "ice-repro") due to previous error
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.
Assessment
This issue has not been assessed yet.