rust-lang / rust-lang/rust

`Found unstable fingerprints for evaluate_obligation: EvaluatedToAmbig` ICE incremental build using gnarly Warp code

Open
#143,937 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-incr-comp C-bug I-ICE S-needs-repro T-compiler
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

I hit an ICE in an incremental build. Not sure how because the code compiled fine, started failing, and then worked again after a clean.

It looks like some gnarly warp code was causing the failure. This code is pretty messy - it's ancient warp code that I haven't updated to a more modern framework.

It's impossible to minimize this because it unfortunately disappeared after a clean.

Code

https://github.com/mmastrac/stylus/blob/master/src/http.rs


    #[cfg(feature = "builtin-ui")]
    let routes ={
        let default_index = path!()
            .map(|| warp::reply::with_header(warp::reply::html(stylus_ui::STYLUS_HTML), "Content-Type", "text/html; charset=utf-8"));

        let default_js = path!("stylus.js")
            .map(|| warp::reply::with_header(warp::reply::html(stylus_ui::STYLUS_JAVASCRIPT), "Content-Type", "text/javascript; charset=utf-8"));

        let default_css = path!("stylus.css")
            .map(|| warp::reply::with_header(warp::reply::html(stylus_ui::STYLUS_CSS), "Content-Type", "text/css; charset=utf-8"));

            warp::get().and(style.or(status).or(log).or(static_files).or(default_index).or(default_js).or(default_css))
    };

Meta

rustc --version --verbose:

rustc 1.87.0 (17067e9ac 2025-05-09)
binary: rustc
commit-hash: 17067e9ac6d7ecb70e50f92c1944e545188d2359
commit-date: 2025-05-09
host: aarch64-apple-darwin
release: 1.87.0
LLVM version: 20.1.1
Error output
error: internal compiler error: encountered incremental compilation error with evaluate_obligation(fa20200322d98ed9-88aadd89099ca4ff)
  |
  = help: This is a known issue with the compiler. Run `cargo clean -p stylus` 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
Backtrace

thread 'rustc' panicked at /rustc/17067e9ac6d7ecb70e50f92c1944e545188d2359/compiler/rustc_query_system/src/query/plumbing.rs:739:9:
Found unstable fingerprints for evaluate_obligation(fa20200322d98ed9-88aadd89099ca4ff): Ok(EvaluatedToAmbig)
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::Erased<[u8; 2]>>
   4: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<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::Erased<[u8; 2]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, 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::type_known_to_meet_bound_modulo_regions
   8: rustc_ty_utils::common_traits::is_item_raw
      [... omitted 2 frames ...]
   9: <rustc_middle::ty::Ty>::is_unpin
  10: rustc_ty_utils::abi::fn_abi_new_uncached::{closure#2}::{closure#2}
  11: rustc_ty_utils::abi::fn_abi_new_uncached::{closure#2}
  12: <core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::chain::Chain<core::iter::adapters::chain::Chain<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Ty>>, core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::Ty>>>, core::option::IntoIter<rustc_middle::ty::Ty>>>, rustc_ty_utils::abi::fn_abi_new_uncached::{closure#3}>, core::result::Result<core::convert::Infallible, &rustc_middle::ty::layout::FnAbiError>> as core::iter::traits::iterator::Iterator>::next
  13: rustc_ty_utils::abi::fn_abi_new_uncached
  14: rustc_ty_utils::abi::fn_abi_of_instance
      [... omitted 2 frames ...]
  15: <rustc_codegen_llvm::context::GenericCx<rustc_codegen_llvm::context::FullCx> as rustc_middle::ty::layout::FnAbiOf>::fn_abi_of_instance
  16: <rustc_codegen_llvm::context::GenericCx<rustc_codegen_llvm::context::FullCx> as rustc_codegen_ssa::traits::declare::PreDefineCodegenMethods>::predefine_fn
  17: rustc_codegen_llvm::base::compile_codegen_unit::module_codegen
  18: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::compile_codegen_unit
  19: rustc_codegen_ssa::base::codegen_crate::<rustc_codegen_llvm::LlvmCodegenBackend>
  20: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate
  21: <rustc_interface::queries::Linker>::codegen_and_build_linker
  22: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>
  23: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

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.87.0 (17067e9ac 2025-05-09) running on aarch64-apple-darwin

note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 -C split-debuginfo=unpacked -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 `tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::server::H2Stream<warp::filter::service::FilteredFuture<warp::filter::and::AndFuture<warp::filter::FilterFn<{closure@warp::filters::method::method_is<{closure@warp::filters::method::get::{closure#0}}>::{closure#0}}>, warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::css_request>, warp::filters::reply::sealed::WithHeader_>, warp::filter::map::Map<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::status_request>, {closure@crates/stylus/src/http.rs:162:14: 162:17}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::filter_segment<{closure@warp::filters::path::param<alloc::string::String>::{closure#0}}, (alloc::string::String,)>::{closure#0}}>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, {closure@crates/stylus/src/http.rs:171:19: 171:25}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::boxed::BoxedFilter<(alloc::boxed::Box<dyn warp::reply::Reply>,)>>, warp::filter::map::Map<warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>, {closure@crates/stylus/src/http.rs:210:18: 210:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:213:18: 213:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:216:18: 216:20}>>>>, hyper::body::body::Body>>>>: core::marker::Unpin`
#1 [is_unpin_raw] computing whether `tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::server::H2Stream<warp::filter::service::FilteredFuture<warp::filter::and::AndFuture<warp::filter::FilterFn<{closure@warp::filters::method::method_is<{closure@warp::filters::method::get::{closure#0}}>::{closure#0}}>, warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::css_request>, warp::filters::reply::sealed::WithHeader_>, warp::filter::map::Map<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::status_request>, {closure@crates/stylus/src/http.rs:162:14: 162:17}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::filter_segment<{closure@warp::filters::path::param<alloc::string::String>::{closure#0}}, (alloc::string::String,)>::{closure#0}}>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, {closure@crates/stylus/src/http.rs:171:19: 171:25}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::boxed::BoxedFilter<(alloc::boxed::Box<dyn warp::reply::Reply>,)>>, warp::filter::map::Map<warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>, {closure@crates/stylus/src/http.rs:210:18: 210:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:213:18: 213:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:216:18: 216:20}>>>>, hyper::body::body::Body>>>>` is `Unpin`
#2 [fn_abi_of_instance] computing call ABI of `core::ptr::drop_in_place::<tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::server::H2Stream<warp::filter::service::FilteredFuture<warp::filter::and::AndFuture<warp::filter::FilterFn<{closure@warp::filters::method::method_is<{closure@warp::filters::method::get::{closure#0}}>::{closure#0}}>, warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::css_request>, warp::filters::reply::sealed::WithHeader_>, warp::filter::map::Map<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::status_request>, {closure@crates/stylus/src/http.rs:162:14: 162:17}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::filter_segment<{closure@warp::filters::path::param<alloc::string::String>::{closure#0}}, (alloc::string::String,)>::{closure#0}}>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, {closure@crates/stylus/src/http.rs:171:19: 171:25}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::boxed::BoxedFilter<(alloc::boxed::Box<dyn warp::reply::Reply>,)>>, warp::filter::map::Map<warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>, {closure@crates/stylus/src/http.rs:210:18: 210:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:213:18: 213:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:216:18: 216:20}>>>>, hyper::body::body::Body>>>>> - shim(Some(tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::server::H2Stream<warp::filter::service::FilteredFuture<warp::filter::and::AndFuture<warp::filter::FilterFn<{closure@warp::filters::method::method_is<{closure@warp::filters::method::get::{closure#0}}>::{closure#0}}>, warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::or::Or<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::css_request>, warp::filters::reply::sealed::WithHeader_>, warp::filter::map::Map<warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, http::status_request>, {closure@crates/stylus/src/http.rs:162:14: 162:17}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::map::Map<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::filter_segment<{closure@warp::filters::path::param<alloc::string::String>::{closure#0}}, (alloc::string::String,)>::{closure#0}}>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, warp::filter::map::Map<warp::filters::any::Any, {closure@crates/stylus/src/http.rs:150:40: 150:47}>>, {closure@crates/stylus/src/http.rs:171:19: 171:25}>, warp::filters::reply::sealed::WithHeader_>>, warp::filter::boxed::BoxedFilter<(alloc::boxed::Box<dyn warp::reply::Reply>,)>>, warp::filter::map::Map<warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>, {closure@crates/stylus/src/http.rs:210:18: 210:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:213:18: 213:20}>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filters::any::Any, warp::filters::path::Exact<warp::filters::path::internal::Opaque<http::run::{closure#0}::__StaticPath>>>, warp::filter::FilterFn<{closure@warp::filters::path::end::{closure#0}}>>, {closure@crates/stylus/src/http.rs:216:18: 216:20}>>>>, hyper::body::body::Body>>>>))`
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 linked src/http.rs example and reproduce the incremental cargo build on rustc 1.87.0 for aarch64-apple-darwin, comparing it with a clean build. Trace the reported evaluate_obligation failure through the rustc_query_system and rustc_trait_selection stack. Done means the ICE is reproducible with a reduced case or its compiler regression and required behavior are identified.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
build-system, compilers
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.