rust-lang / rust-lang/rust-clippy

ICE: unstable fingerprints for evaluate_obligation during incremental compilation

Open
#16,947 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug I-ICE
Dominant language
Rust
Stars
13.5k
Forks
2.2k
Avg merge
2d 10h
Merged PRs (30d)
32

Description

Summary

Clippy panics with an internal compiler error due to unstable fingerprints in incremental compilation when checking code that uses futures_util stream combinators (filter_map + buffer_unordered + collect) with async closures.

Version

rustc 1.95.0 (59807616e 2026-04-14)
clippy 0.1.95 (59807616e1 2026-04-14)
x86_64-unknown-linux-gnu

Error output

error: internal compiler error: encountered incremental compilation error with evaluate_obligation(756fcc40b4fb2203-2f9389f8417c9990)
  |
  = 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

thread 'rustc' panicked at compiler/rustc_middle/src/verify_ich.rs:80:9:
Found unstable fingerprints for evaluate_obligation(756fcc40b4fb2203-2f9389f8417c9990): Ok(EvaluatedToOk)

Query stack during panic

#0 [evaluate_obligation] evaluating trait selection obligation `{async closure@src/fs/watcher.rs:712:17: 712:34}: futures_util::fns::FnMut1<core::option::Option<(String, PathBuf, u64, SystemTime)>>`
#1 [type_op_ascribe_user_type] evaluating `type_op_ascribe_user_type` (StreamExt::collect with FilterMap<BufferUnordered<Iter<Map<IntoIter<String>, CoroutineClosure>>>, CoroutineClosure>)
... and 13 other queries

Dep node stack (try_mark_green)

#0 check_match(backend_rs::create_app_from_endpoint)
#1 mir_built(backend_rs::create_app_from_endpoint)
#2 has_ffi_unwind_calls(backend_rs::create_app_from_endpoint)
#3 mir_promoted(backend_rs::create_app_from_endpoint)
#4 mir_borrowck(backend_rs::create_app_from_endpoint)

Reproduction notes

  • Occurs during incremental compilation only. A clean build (cargo clean -p backend-rs) succeeds.
  • The code uses futures_util stream combinators: buffer_unorderedfilter_map (with an async closure) → collect::<Vec<_>>().
  • Compiler flags: --crate-type lib -C embed-bitcode=no -C debuginfo=2 -C incremental=[REDACTED]
  • Triggered by cargo clippy -- -D warnings on a subsequent build after source changes.

Workaround

cargo clean -p backend-rs clears the corrupted incremental cache and allows compilation to succeed.

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 at compiler/rustc_middle/src/verify_ich.rs:80 and trace the evaluate_obligation query described in the query and dep-node stacks. Reproduce with cargo clippy -- -D warnings after a source change and incremental rebuild, then verify that the futures_util stream-combinator case no longer produces an unstable-fingerprint ICE without requiring cargo clean.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
build-system, compilers, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.