[ICE]: incremental compilation evaluate_obligation, with repro, stable + nightly
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 119k
- Forks
- 16.1k
- PR merge metrics
- PR metrics pending
Description
I haven't minimized this, but it is reliably reproducible.
Code
I hit this while working on crates.io and stashing and committing stuff. I've pushed up what reproduces the issue every time to my fork in the rust-ice-repro branch.
First, check out the last commit https://github.com/carols10cents/crates.io/commit/6ee705b171f860d16b980077a55232307553f7d8
and run cargo +nightly test --workspace
Then check out the penultimate commit https://github.com/carols10cents/crates.io/commit/19385d5f62a25dc0b81b1e24c112e0f40f9be4ba
and run cargo +nightly test --workspace again and I get an ICE every time.
Meta
I am able to reproduce the ICE using the above steps BOTH with stable AND with nightly a293cc4af 2026-01-30.
stable rustc --version --verbose:
rustc 1.93.0 (254b59607 2026-01-19)
binary: rustc
commit-hash: 254b59607d4417e9dffbc307138ae5c86280fe4c
commit-date: 2026-01-19
host: aarch64-apple-darwin
release: 1.93.0
LLVM version: 21.1.8
nightly rustc --version --verbose:
rustc 1.95.0-nightly (a293cc4af 2026-01-30)
binary: rustc
commit-hash: a293cc4af8b26701c42738381c0c6f9d2ba881e0
commit-date: 2026-01-30
host: aarch64-apple-darwin
release: 1.95.0-nightly
LLVM version: 22.1.0
Error output
error: internal compiler error: encountered incremental compilation error with evaluate_obligation(7e778a6f67b65486-cf4246bea99b5d80)
I've also attached the 2 files created by rustc.
Backtrace
thread 'rustc' (10303835) panicked at /rustc-dev/a293cc4af8b26701c42738381c0c6f9d2ba881e0/compiler/rustc_query_system/src/query/plumbing.rs:745:9:
Found unstable fingerprints for evaluate_obligation(7e778a6f67b65486-cf4246bea99b5d80): Ok(EvaluatedToOk)
stack backtrace:
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: rustc_query_system::query::plumbing::incremental_verify_ich_failed::<rustc_middle::ty::context::TyCtxt>
3: rustc_query_system::query::plumbing::incremental_verify_ich::<rustc_middle::ty::context::TyCtxt, rustc_middle::query::erase::ErasedData<[u8; 2]>>
4: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::SemiDynamicQueryDispatcher<rustc_query_system::query::caches::DefaultCache<rustc_type_ir::canonical::CanonicalQueryInput<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::ParamEnvAnd<rustc_middle::ty::predicate::Predicate>>, rustc_middle::query::erase::ErasedData<[u8; 2]>>, false, false, false>, true>
5: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt>::evaluate_obligation
6: <rustc_infer::infer::InferCtxt as rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt>::evaluate_obligation_no_overflow
7: <rustc_trait_selection::traits::fulfill::FulfillProcessor>::process_trait_obligation
8: <rustc_trait_selection::traits::fulfill::FulfillProcessor as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation
9: <rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor>
10: <rustc_trait_selection::traits::fulfill::FulfillmentContext<rustc_infer::traits::engine::ScrubbedTraitError> as rustc_infer::traits::engine::TraitEngine<rustc_infer::traits::engine::ScrubbedTraitError>>::try_evaluate_obligations
11: <rustc_trait_selection::traits::fulfill::FulfillmentContext<rustc_infer::traits::engine::ScrubbedTraitError> as rustc_infer::traits::engine::TraitEngine<rustc_infer::traits::engine::ScrubbedTraitError>>::evaluate_obligations_error_on_ambiguity
12: <rustc_trait_selection::traits::engine::ObligationCtxt>::make_canonicalized_query_response::<()>
13: rustc_traits::type_op::type_op_ascribe_user_type
[... omitted 2 frames ...]
14: <rustc_middle::traits::query::type_op::AscribeUserType as rustc_trait_selection::traits::query::type_op::QueryTypeOp>::perform_query
15: <rustc_borrowck::type_check::TypeChecker>::ascribe_user_type
16: rustc_borrowck::type_check::type_check
17: <rustc_borrowck::root_cx::BorrowCheckRootCtxt>::do_mir_borrowck
18: rustc_borrowck::mir_borrowck
[... omitted 1 frame ...]
19: rustc_hir_analysis::collect::type_of::opaque::find_opaque_ty_constraints_for_rpit
20: rustc_hir_analysis::collect::type_of::type_of_opaque
[... omitted 1 frame ...]
21: <rustc_trait_selection::traits::select::SelectionContext>::confirm_auto_impl_candidate::{closure#0}
22: <rustc_trait_selection::traits::select::SelectionContext>::confirm_candidate
23: <rustc_trait_selection::traits::select::SelectionContext>::evaluate_candidate::{closure#0}::{closure#0}
24: <rustc_infer::infer::InferCtxt>::probe::<core::result::Result<rustc_middle::traits::select::EvaluationResult, rustc_middle::traits::select::OverflowError>, <rustc_trait_selection::traits::select::SelectionContext>::evaluation_probe<<rustc_trait_selection::traits::select::SelectionContext>::evaluate_candidate::{closure#0}::{closure#0}>::{closure#0}>
25: <rustc_trait_selection::traits::select::SelectionContext>::in_task::<<rustc_trait_selection::traits::select::SelectionContext>::evaluate_trait_predicate_recursively::{closure#0}::{closure#1}, core::result::Result<rustc_middle::traits::select::EvaluationResult, rustc_middle::traits::select::OverflowError>>::{closure#0}
26: <rustc_trait_selection::traits::select::SelectionContext>::evaluate_trait_predicate_recursively
27: <rustc_trait_selection::traits::select::SelectionContext>::evaluate_predicate_recursively::{closure#0}::{closure#0}
28: <rustc_trait_selection::traits::select::SelectionContext>::evaluate_predicate_recursively
29: <rustc_trait_selection::traits::select::SelectionContext>::evaluate_candidate::{closure#0}::{closure#0}
30: <rustc_infer::infer::InferCtxt>::probe::<core::result::Result<rustc_middle::traits::select::EvaluationResult, rustc_middle::traits::select::OverflowError>, <rustc_trait_selection::traits::select::SelectionContext>::evaluation_probe<<rustc_trait_selection::traits::select::SelectionContext>::evaluate_candidate::{closure#0}::{closure#0}>::{closure#0}>
31: <rustc_trait_selection::traits::select::SelectionContext>::candidate_from_obligation::{closure#0}::{closure#0}
32: <rustc_trait_selection::traits::select::SelectionContext>::candidate_from_obligation::{closure#0}
33: <rustc_trait_selection::traits::select::SelectionContext>::poly_select::{closure#0}
34: <rustc_trait_selection::traits::fulfill::FulfillProcessor>::process_trait_obligation
35: <rustc_trait_selection::traits::fulfill::FulfillProcessor as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation
36: <rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor>
37: <rustc_trait_selection::traits::fulfill::FulfillmentContext<rustc_trait_selection::traits::FulfillmentError> as rustc_infer::traits::engine::TraitEngine<rustc_trait_selection::traits::FulfillmentError>>::try_evaluate_obligations
38: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_argument_types
39: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
40: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
41: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_block
42: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
43: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_return_or_body_tail
44: rustc_hir_typeck::check::check_fn
45: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
46: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
47: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_argument_types
48: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
49: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
50: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_decl
51: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_block
52: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
53: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_argument_types
54: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
55: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
56: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
57: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
58: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
59: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
60: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
61: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
62: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
63: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
64: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
65: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
66: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
67: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
68: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
69: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
70: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
71: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
72: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
73: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
74: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
75: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
76: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
77: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
78: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
79: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
80: <rustc_hir_typeck::fn_ctxt::FnCtxt>::check_expr_kind
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
rustc-ice-2026-01-31T02_42_36-89980.txt
rustc-ice-2026-01-31T02_42_36-89981.txt
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
First reproduce the ICE by running cargo +nightly test --workspace on the two specified crates.io commits, then read the panic at compiler/rustc_query_system/src/query/plumbing.rs:745 and the evaluate_obligation path shown in the backtrace. Trace the incremental fingerprint failure through rustc_trait_selection and rustc_borrowck; done means the reported reproduction no longer triggers the internal compiler error on stable and nightly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100