rust-lang / rust-lang/rust

[ICE]: Found unstable fingerprints for evaluate_obligation(...): Ok(EvaluatedToOk)

Open
#158,328 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug I-ICE needs-triage T-compiler
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

This may be a dupe with #155740 and/or #154857, but filing anew because it seems to be a consistent reproducer for me with a fairly small source diff, although still on a fairly tall stack of crates and cargo work.

Reproduces consistently on two machines, with rustc 1.95.0 and 1.96.0. It does not reproduce with current nightly (2026-06-22).

Code

The ICE happens on incremental recompile between the two top commits of branch https://github.com/tailscale/tailscale-rs/tree/rust-ice . Initially found with our giant CI check run (in bin/check), but I narrowed it down to a pair of cargo build commands on a specific crate.

git clone https://github.com/tailscale/tailscale-rs rust-ice
cd rust-ice/ts_devtools
cargo clean
git checkout b0f8ce26024bcf8ba7f925636521c2fddf82fa34
cargo build
git checkout 1771fe1d2ffa443217496d66f88c97178d5479b2
cargo build

The second cargo build triggers a rustc panic.

Meta

Versions: reproduces consistently on 1.95.0, 1.96.0:

rustc --version --verbose:

rustc 1.95.0 (59807616e 2026-04-14)
binary: rustc
commit-hash: 59807616e1fa2540724bfbac14d7976d7e4a3860
commit-date: 2026-04-14
host: x86_64-unknown-linux-gnu
release: 1.95.0
LLVM version: 22.1.2
rustc 1.96.0 (ac68faa20 2026-05-25)
binary: rustc
commit-hash: ac68faa20c58cbccd01ee7208bf3b6e93a7d7f96
commit-date: 2026-05-25
host: x86_64-unknown-linux-gnu
release: 1.96.0
LLVM version: 22.1.2

It does not reproduce on current nightly at time of writing:

rustc 1.98.0-nightly (4429659e4 2026-06-22)
binary: rustc
commit-hash: 4429659e4745016bd3f26a4a421843edc7fbc422
commit-date: 2026-06-22
host: x86_64-unknown-linux-gnu
release: 1.98.0-nightly
LLVM version: 22.1.7

All toolchains come from rustup.

Error output

Error output and backtrace is from 1.96.0.

   Compiling ts_control v0.3.3 (/home/dave/tail/rust-ice/ts_control)
   Compiling ts_netcheck v0.3.3 (/home/dave/tail/rust-ice/ts_netcheck)
   Compiling ts_runtime v0.3.3 (/home/dave/tail/rust-ice/ts_runtime)
   Compiling tailscale v0.3.3 (/home/dave/tail/rust-ice)
   Compiling ts_cli_util v0.3.3 (/home/dave/tail/rust-ice/ts_cli_util)
   Compiling ts_devtools v0.3.3 (/home/dave/tail/rust-ice/ts_devtools)
error: internal compiler error: encountered incremental compilation error with evaluate_obligation(91ec3250ae59823b-a2c85d98a904b519)
  |
  = note: please follow the instructions below to create a bug report with the provided information
  = note: for incremental compilation bugs, having a reproduction is vital
  = note: an ideal reproduction consists of the code before and some patch that then triggers the bug when applied and compiled again
  = note: as a workaround, you can run `cargo clean -p pftail` or `cargo clean` to allow your project to compile
Backtrace

thread 'rustc' (403248) panicked at /rustc-dev/ac68faa20c58cbccd01ee7208bf3b6e93a7d7f96/compiler/rustc_middle/src/verify_ich.rs:80:9:
Found unstable fingerprints for evaluate_obligation(91ec3250ae59823b-a2c85d98a904b519): Ok(EvaluatedToOk)
stack backtrace:
   0:     0x7c3411a278db - <<std[52919eca6bce4da3]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[18c8dd30382e7099]::fmt::Display>::fmt
   1:     0x7c341201e548 - core[18c8dd30382e7099]::fmt::write
   2:     0x7c34133e5d76 - <std[52919eca6bce4da3]::sys::stdio::unix::Stderr as std[52919eca6bce4da3]::io::Write>::write_fmt
   3:     0x7c34119fdbe8 - std[52919eca6bce4da3]::panicking::default_hook::{closure#0}
   4:     0x7c3411a1af43 - std[52919eca6bce4da3]::panicking::default_hook
   5:     0x7c34109f32bc - std[52919eca6bce4da3]::panicking::update_hook::<alloc[c54872da263eaafc]::boxed::Box<rustc_driver_impl[6663a291b147a63]::install_ice_hook::{closure#1}>>::{closure#0}
   6:     0x7c3411a1b222 - std[52919eca6bce4da3]::panicking::panic_with_hook
   7:     0x7c34119fdca8 - std[52919eca6bce4da3]::panicking::panic_handler::{closure#0}
   8:     0x7c34119f2209 - std[52919eca6bce4da3]::sys::backtrace::__rust_end_short_backtrace::<std[52919eca6bce4da3]::panicking::panic_handler::{closure#0}, !>
   9:     0x7c34119ff70d - __rustc[8068f81614cfe5c]::rust_begin_unwind
  10:     0x7c340e57083c - core[18c8dd30382e7099]::panicking::panic_fmt
  11:     0x7c34110582d7 - rustc_middle[a5b6b88feb5609e]::verify_ich::incremental_verify_ich_failed
  12:     0x7c3412bbb016 - rustc_middle[a5b6b88feb5609e]::verify_ich::incremental_verify_ich::<rustc_middle[a5b6b88feb5609e]::query::erase::ErasedData<[u8; 2usize]>>
  13:     0x7c3412608c5a - rustc_query_impl[5e8495fc2c24c830]::execution::try_execute_query::<rustc_middle[a5b6b88feb5609e]::query::caches::DefaultCache<rustc_type_ir[142733f82a324bd8]::canonical::CanonicalQueryInput<rustc_middle[a5b6b88feb5609e]::ty::context::TyCtxt, rustc_middle[a5b6b88feb5609e]::ty::ParamEnvAnd<rustc_middle[a5b6b88feb5609e]::ty::predicate::Predicate>>, rustc_middle[a5b6b88feb5609e]::query::erase::ErasedData<[u8; 2usize]>>, true>
  14:     0x7c341260788a - rustc_query_impl[5e8495fc2c24c830]::query_impl::evaluate_obligation::execute_query_incr::__rust_end_short_backtrace
  15:     0x7c3412760a1d - <rustc_trait_selection[de5a181da859feaf]::traits::fulfill::FulfillProcessor as rustc_data_structures[b25e30df202a677b]::obligation_forest::ObligationProcessor>::process_obligation
  16:     0x7c3412004716 - <rustc_data_structures[b25e30df202a677b]::obligation_forest::ObligationForest<rustc_trait_selection[de5a181da859feaf]::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection[de5a181da859feaf]::traits::fulfill::FulfillProcessor>
  17:     0x7c341287c9f3 - <rustc_trait_selection[de5a181da859feaf]::traits::engine::ObligationCtxt>::make_canonicalized_query_response::<()>
  18:     0x7c341287b6f9 - rustc_traits[3975eb9380e6e8fa]::type_op::type_op_prove_predicate
  19:     0x7c3412e19d27 - rustc_query_impl[5e8495fc2c24c830]::execution::try_execute_query::<rustc_middle[a5b6b88feb5609e]::query::caches::DefaultCache<rustc_type_ir[142733f82a324bd8]::canonical::CanonicalQueryInput<rustc_middle[a5b6b88feb5609e]::ty::context::TyCtxt, rustc_middle[a5b6b88feb5609e]::ty::ParamEnvAnd<rustc_middle[a5b6b88feb5609e]::traits::query::type_op::ProvePredicate>>, rustc_middle[a5b6b88feb5609e]::query::erase::ErasedData<[u8; 8usize]>>, true>
  20:     0x7c3412e18c3f - rustc_query_impl[5e8495fc2c24c830]::query_impl::type_op_prove_predicate::execute_query_incr::__rust_end_short_backtrace
  21:     0x7c3412655250 - <rustc_borrowck[66c3034ef1d4feb6]::type_check::TypeChecker>::normalize_and_prove_instantiated_predicates
  22:     0x7c340f3c2cc4 - <rustc_borrowck[66c3034ef1d4feb6]::type_check::TypeChecker as rustc_middle[a5b6b88feb5609e]::mir::visit::Visitor>::visit_operand
  23:     0x7c3412e627d5 - <rustc_borrowck[66c3034ef1d4feb6]::type_check::TypeChecker as rustc_middle[a5b6b88feb5609e]::mir::visit::Visitor>::visit_body
  24:     0x7c3412e419b6 - rustc_borrowck[66c3034ef1d4feb6]::type_check::type_check
  25:     0x7c3412ba138e - <rustc_borrowck[66c3034ef1d4feb6]::root_cx::BorrowCheckRootCtxt>::do_mir_borrowck
  26:     0x7c3412b9cd2f - rustc_borrowck[66c3034ef1d4feb6]::mir_borrowck
  27:     0x7c3412b9cb65 - rustc_query_impl[5e8495fc2c24c830]::query_impl::mir_borrowck::invoke_provider_fn::__rust_begin_short_backtrace
  28:     0x7c341218b110 - rustc_query_impl[5e8495fc2c24c830]::execution::try_execute_query::<rustc_data_structures[b25e30df202a677b]::vec_cache::VecCache<rustc_span[fab24ddf1f607803]::def_id::LocalDefId, rustc_middle[a5b6b88feb5609e]::query::erase::ErasedData<[u8; 8usize]>, rustc_middle[a5b6b88feb5609e]::dep_graph::graph::DepNodeIndex>, true>
  29:     0x7c3412182b6e - rustc_query_impl[5e8495fc2c24c830]::query_impl::mir_borrowck::execute_query_incr::__rust_end_short_backtrace
  30:     0x7c3412311238 - rustc_mir_transform[f41c4d82acfd6942]::mir_drops_elaborated_and_const_checked
  31:     0x7c341231086b - rustc_query_impl[5e8495fc2c24c830]::query_impl::mir_drops_elaborated_and_const_checked::invoke_provider_fn::__rust_begin_short_backtrace
  32:     0x7c341218a729 - rustc_query_impl[5e8495fc2c24c830]::execution::try_execute_query::<rustc_data_structures[b25e30df202a677b]::vec_cache::VecCache<rustc_span[fab24ddf1f607803]::def_id::LocalDefId, rustc_middle[a5b6b88feb5609e]::query::erase::ErasedData<[u8; 8usize]>, rustc_middle[a5b6b88feb5609e]::dep_graph::graph::DepNodeIndex>, true>
  33:     0x7c3412182a4a - rustc_query_impl[5e8495fc2c24c830]::query_impl::mir_drops_elaborated_and_const_checked::execute_query_incr::__rust_end_short_backtrace
  34:     0x7c3412f340d6 - <rustc_middle[a5b6b88feb5609e]::ty::context::TyCtxt>::par_hir_body_owners::<rustc_interface[fdd38ffd3247134f]::passes::run_required_analyses::{closure#2}::{closure#0}>::{closure#0}
  35:     0x7c3412f33397 - rustc_interface[fdd38ffd3247134f]::passes::analysis
  36:     0x7c341322fe87 - rustc_query_impl[5e8495fc2c24c830]::execution::try_execute_query::<rustc_middle[a5b6b88feb5609e]::query::caches::SingleCache<rustc_middle[a5b6b88feb5609e]::query::erase::ErasedData<[u8; 0usize]>>, true>
  37:     0x7c341322f7ea - rustc_query_impl[5e8495fc2c24c830]::query_impl::analysis::execute_query_incr::__rust_end_short_backtrace
  38:     0x7c3413183642 - rustc_interface[fdd38ffd3247134f]::interface::run_compiler::<(), rustc_driver_impl[6663a291b147a63]::run_compiler::{closure#0}>::{closure#1}
  39:     0x7c341316d67e - std[52919eca6bce4da3]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[fdd38ffd3247134f]::util::run_in_thread_with_globals<rustc_interface[fdd38ffd3247134f]::util::run_in_thread_pool_with_globals<rustc_interface[fdd38ffd3247134f]::interface::run_compiler<(), rustc_driver_impl[6663a291b147a63]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  40:     0x7c341316df20 - <std[52919eca6bce4da3]::thread::lifecycle::spawn_unchecked<rustc_interface[fdd38ffd3247134f]::util::run_in_thread_with_globals<rustc_interface[fdd38ffd3247134f]::util::run_in_thread_pool_with_globals<rustc_interface[fdd38ffd3247134f]::interface::run_compiler<(), rustc_driver_impl[6663a291b147a63]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[18c8dd30382e7099]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  41:     0x7c341316edac - <std[52919eca6bce4da3]::sys::thread::unix::Thread>::new::thread_start
  42:     0x7c340caa40da - start_thread
                               at ./nptl/pthread_create.c:454:8
  43:     0x7c340cb377ac - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78:0
  44:                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.96.0 (ac68faa20 2026-05-25) 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 [evaluate_obligation] evaluating trait selection obligation `futures_util::stream::stream::filter_map::FilterMap<ts_cli_util::CommonArgs::connect_control::{opaque#0}::{opaque#0}, {async closure body@ts_devtools/src/bin/pftail.rs:30:31: 30:53}, {async closure@ts_devtools/src/bin/pftail.rs:30:21: 30:30}>: futures_core::stream::Stream`
#1 [type_op_prove_predicate] evaluating `type_op_prove_predicate` `ProvePredicate { predicate: Binder { value: TraitPredicate(<futures_util::stream::stream::filter_map::FilterMap<ts_cli_util::CommonArgs::connect_control::{opaque#0}::{opaque#0}, {async closure body@ts_devtools/src/bin/pftail.rs:30:31: 30:53}, {async closure@ts_devtools/src/bin/pftail.rs:30:21: 30:30}> as futures_core::stream::Stream>, polarity:Positive), bound_vars: [] } }`
#2 [mir_borrowck] borrow-checking `main`
#3 [mir_drops_elaborated_and_const_checked] elaborating drops for `main`
#4 [analysis] running analysis passes on crate `pftail`
end of query stack

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the two-commit reproduction in tailscale-rs/ts_devtools using the listed rustc versions and cargo build commands. Read compiler/rustc_middle/src/verify_ich.rs around the reported panic and follow the evaluate_obligation and mir_borrowck entries in the query stack. Done means the incremental rebuild no longer triggers this internal compiler error, with a regression test if the relevant test location is identified.

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
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.