Repository: rust
Issue: ICE: `EvalCtxt is tainted -- nested goals may have been dropped in a previous call to `try_evaluate_added_goals`
Labels: I-ICE,T-compiler,A-specialization,C-bug,S-bug-has-test,T-types,S-has-bisection

<!--
[31mICE[0m: Rustc ./a.rs '' 'thread 'rustc' panicked at /rustc/5c0a6e68cfdad859615c2888de76505f13e6f01b/compiler/rustc_next_trait_solver/src/solve/eval_ctxt/canonical.rs:88:9: 'assertion `left == right` failed: EvalCtxt is tainted -- nested goals may have been dropped in a previous call to `try_evaluate_added_goals!`'', 'thread 'rustc' panicked at /rustc/5c0a6e68cfdad859615c2888de76505f13e6f01b/compiler/rustc_next_trait_solver/src/solve/eval_ctxt/canonical.rs:88:9: 'assertion `left == right` failed: EvalCtxt is tainted -- nested goals may have been dropped in a previous call to `try_evaluate_added_goals!`''
File: /tmp/im/a.rs
-->

auto-reduced (treereduce-rust):
````rust
trait Iterate<'a> {
    type Ty: Valid;
}
impl<'a, T> Iterate<'a> for T
where
    T: Check,
{
    default type Ty = ();
}

trait Check {}
impl<'a, T> Eq for T where <T as Iterate<'a>>::Ty: Valid {}

trait Valid {}

````

original:
````rust
#![feature(specialization)]
//~^ WARN the feature `specialization` is incomplete

trait Iterate<'a> {
    type Ty: Valid;
    fn mk() -> Self;
}
impl<'a, T> Iterate<'a> for T
where
    T: Check,
{
    default type Ty = ();
    //~^ ERROR the trait bound `(): Valid` is not satisfied
    default fn iterate(self) {}
}

trait Check {}
impl<'a, T> Eq for T where <T as Iterate<'a>>::Ty: Valid {}

trait Valid {}

fn main() {
    Iterate::iterate(0);
}

````

Version information
````
rustc 1.85.0-nightly (5c0a6e68c 2024-12-29)
binary: rustc
commit-hash: 5c0a6e68cfdad859615c2888de76505f13e6f01b
commit-date: 2024-12-29
host: x86_64-unknown-linux-gnu
release: 1.85.0-nightly
LLVM version: 19.1.6

````



Command:
`/home/matthias/.rustup/toolchains/master/bin/rustc `

<details><summary><strong>Program output</strong></summary>
<p>

```
error[E0658]: specialization is unstable
 --> /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:8:5
  |
8 |     default type Ty = ();
  |     ^^^^^^^^^^^^^^^^^^^^^
  |
  = note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
  = help: add `#![feature(specialization)]` to the crate attributes to enable
  = note: this compiler was built on 2024-12-29; consider upgrading it if it is out of date

error[E0601]: `main` function not found in crate `mvce`
  --> /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:14:15
   |
14 | trait Valid {}
   |               ^ consider adding a `main` function to `/tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs`

error[E0277]: the trait bound `(): Valid` is not satisfied
  --> /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:8:23
   |
8  |     default type Ty = ();
   |                       ^^ the trait `Valid` is not implemented for `()`
   |
help: this trait has no implementations, consider adding one
  --> /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:14:1
   |
14 | trait Valid {}
   | ^^^^^^^^^^^
note: required by a bound in `Iterate::Ty`
  --> /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:2:14
   |
2  |     type Ty: Valid;
   |              ^^^^^ required by this bound in `Iterate::Ty`

thread 'rustc' panicked at /rustc/5c0a6e68cfdad859615c2888de76505f13e6f01b/compiler/rustc_next_trait_solver/src/solve/eval_ctxt/canonical.rs:88:9:
assertion `left == right` failed: EvalCtxt is tainted -- nested goals may have been dropped in a previous call to `try_evaluate_added_goals!`
  left: Err(NoSolution)
 right: Ok(())
stack backtrace:
   0:     0x783919abf5ca - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::hd76018e90f9bbfc3
   1:     0x78391a213466 - core::fmt::write::hed666983d2d54108
   2:     0x78391b14c011 - std::io::Write::write_fmt::hbf0b651b2658b449
   3:     0x783919abf422 - std::sys::backtrace::BacktraceLock::print::h3a9d6ff043e667f2
   4:     0x783919ac1929 - std::panicking::default_hook::{{closure}}::h928484cbba0336ce
   5:     0x783919ac1772 - std::panicking::default_hook::ha8b3bd2f7ee21424
   6:     0x783918c2e1f8 - std[3ebcc71b08131339]::panicking::update_hook::<alloc[740b194b6bfe8ab6]::boxed::Box<rustc_driver_impl[5b4410ee4a2bc4c4]::install_ice_hook::{closure#1}>>::{closure#0}
   7:     0x783919ac20e3 - std::panicking::rust_panic_with_hook::h58dbee9f864d075b
   8:     0x783919ac1dda - std::panicking::begin_panic_handler::{{closure}}::h0bef6691ea876880
   9:     0x783919abfa69 - std::sys::backtrace::__rust_end_short_backtrace::h293ac16534c0773f
  10:     0x783919ac1a9d - rust_begin_unwind
  11:     0x78391679a380 - core::panicking::panic_fmt::h291df79adaba8570
  12:     0x78391865f116 - core::panicking::assert_failed_inner::hc6124cab6b532df5
  13:     0x783919840523 - core[614645412a48dac]::panicking::assert_failed::<core[614645412a48dac]::result::Result<(), rustc_type_ir[57a1164042dbd323]::solve::NoSolution>, core[614645412a48dac]::result::Result<(), rustc_type_ir[57a1164042dbd323]::solve::NoSolution>>
  14:     0x78391ade13e2 - <rustc_next_trait_solver[8d04bf79b6e2d511]::solve::eval_ctxt::EvalCtxt<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::evaluate_added_goals_and_make_canonical_response::{closure#0}
  15:     0x7839171d6ebc - <rustc_next_trait_solver[8d04bf79b6e2d511]::solve::eval_ctxt::EvalCtxt<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::assemble_and_evaluate_candidates::<rustc_type_ir[57a1164042dbd323]::predicate::TraitPredicate<rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>
  16:     0x78391b3f51e7 - <rustc_type_ir[57a1164042dbd323]::search_graph::SearchGraph<rustc_next_trait_solver[8d04bf79b6e2d511]::solve::search_graph::SearchGraphDelegate<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate>, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::evaluate_goal_in_task::<&mut <rustc_next_trait_solver[8d04bf79b6e2d511]::solve::eval_ctxt::EvalCtxt<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>
  17:     0x78391aded028 - <rustc_type_ir[57a1164042dbd323]::search_graph::SearchGraph<rustc_next_trait_solver[8d04bf79b6e2d511]::solve::search_graph::SearchGraphDelegate<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate>, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::with_new_goal::<<rustc_next_trait_solver[8d04bf79b6e2d511]::solve::eval_ctxt::EvalCtxt<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::evaluate_canonical_goal::{closure#0}::{closure#0}::{closure#0}>
  18:     0x78391ade4fa2 - <rustc_next_trait_solver[8d04bf79b6e2d511]::solve::eval_ctxt::EvalCtxt<rustc_trait_selection[e5fd4b86af22d0f3]::solve::delegate::SolverDelegate, rustc_middle[404d2ae367c92b56]::ty::context::TyCtxt>>::evaluate_goal_raw
  19:     0x78391ade9f6a - rustc_trait_selection[e5fd4b86af22d0f3]::traits::coherence::overlap
  20:     0x78391a21a626 - <rustc_middle[404d2ae367c92b56]::traits::specialization_graph::Children as rustc_trait_selection[e5fd4b86af22d0f3]::traits::specialize::specialization_graph::ChildrenExt>::insert
  21:     0x78391b05a391 - <rustc_middle[404d2ae367c92b56]::traits::specialization_graph::Graph as rustc_trait_selection[e5fd4b86af22d0f3]::traits::specialize::specialization_graph::GraphExt>::insert
  22:     0x78391a448783 - rustc_trait_selection[e5fd4b86af22d0f3]::traits::specialize::specialization_graph_provider
  23:     0x78391a4484dd - rustc_query_impl[dd07ae5eac7025a4]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[dd07ae5eac7025a4]::query_impl::specialization_graph_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 8usize]>>
  24:     0x78391a2ed91f - rustc_query_system[a6bda300fd750441]::query::plumbing::try_execute_query::<rustc_query_impl[dd07ae5eac7025a4]::DynamicConfig<rustc_query_system[a6bda300fd750441]::query::caches::DefIdCache<rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[dd07ae5eac7025a4]::plumbing::QueryCtxt, false>
  25:     0x78391a8d66b5 - rustc_query_impl[dd07ae5eac7025a4]::query_impl::specialization_graph_of::get_query_non_incr::__rust_end_short_backtrace
  26:     0x78391a9af1ad - rustc_hir_analysis[42d91103dadc7b0f]::coherence::coherent_trait
  27:     0x78391a9aef17 - rustc_query_impl[dd07ae5eac7025a4]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[dd07ae5eac7025a4]::query_impl::coherent_trait::dynamic_query::{closure#2}::{closure#0}, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>>
  28:     0x78391a5125eb - rustc_query_system[a6bda300fd750441]::query::plumbing::try_execute_query::<rustc_query_impl[dd07ae5eac7025a4]::DynamicConfig<rustc_query_system[a6bda300fd750441]::query::caches::DefIdCache<rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[dd07ae5eac7025a4]::plumbing::QueryCtxt, false>
  29:     0x78391a511622 - rustc_query_impl[dd07ae5eac7025a4]::query_impl::coherent_trait::get_query_non_incr::__rust_end_short_backtrace
  30:     0x78391aaa93cc - rustc_middle[404d2ae367c92b56]::query::plumbing::query_ensure_error_guaranteed::<rustc_query_system[a6bda300fd750441]::query::caches::DefIdCache<rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>>, ()>
  31:     0x7839179b8cbd - rustc_hir_analysis[42d91103dadc7b0f]::check::wfcheck::check_well_formed
  32:     0x78391abfc2bb - rustc_query_impl[dd07ae5eac7025a4]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[dd07ae5eac7025a4]::query_impl::check_well_formed::dynamic_query::{closure#2}::{closure#0}, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>>
  33:     0x78391abfbd69 - rustc_query_system[a6bda300fd750441]::query::plumbing::try_execute_query::<rustc_query_impl[dd07ae5eac7025a4]::DynamicConfig<rustc_data_structures[cf63a78d0cde4c59]::vec_cache::VecCache<rustc_span[8931c23d12488321]::def_id::LocalDefId, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>, rustc_query_system[a6bda300fd750441]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[dd07ae5eac7025a4]::plumbing::QueryCtxt, false>
  34:     0x78391abfb7cb - rustc_query_impl[dd07ae5eac7025a4]::query_impl::check_well_formed::get_query_non_incr::__rust_end_short_backtrace
  35:     0x78391abfc52c - rustc_hir_analysis[42d91103dadc7b0f]::check::wfcheck::check_mod_type_wf
  36:     0x78391abfc34b - rustc_query_impl[dd07ae5eac7025a4]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[dd07ae5eac7025a4]::query_impl::check_mod_type_wf::dynamic_query::{closure#2}::{closure#0}, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>>
  37:     0x78391b177188 - rustc_query_system[a6bda300fd750441]::query::plumbing::try_execute_query::<rustc_query_impl[dd07ae5eac7025a4]::DynamicConfig<rustc_query_system[a6bda300fd750441]::query::caches::DefaultCache<rustc_span[8931c23d12488321]::def_id::LocalModDefId, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[dd07ae5eac7025a4]::plumbing::QueryCtxt, false>
  38:     0x78391b176f30 - rustc_query_impl[dd07ae5eac7025a4]::query_impl::check_mod_type_wf::get_query_non_incr::__rust_end_short_backtrace
  39:     0x78391a4f6db8 - rustc_hir_analysis[42d91103dadc7b0f]::check_crate
  40:     0x78391a670068 - rustc_interface[369fa5095bec1a52]::passes::run_required_analyses
  41:     0x78391b1502de - rustc_interface[369fa5095bec1a52]::passes::analysis
  42:     0x78391b1502af - rustc_query_impl[dd07ae5eac7025a4]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[dd07ae5eac7025a4]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 0usize]>>
  43:     0x78391b196ad5 - rustc_query_system[a6bda300fd750441]::query::plumbing::try_execute_query::<rustc_query_impl[dd07ae5eac7025a4]::DynamicConfig<rustc_query_system[a6bda300fd750441]::query::caches::SingleCache<rustc_middle[404d2ae367c92b56]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[dd07ae5eac7025a4]::plumbing::QueryCtxt, false>
  44:     0x78391b19680e - rustc_query_impl[dd07ae5eac7025a4]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  45:     0x78391b1e64de - rustc_interface[369fa5095bec1a52]::passes::create_and_enter_global_ctxt::<core[614645412a48dac]::option::Option<rustc_interface[369fa5095bec1a52]::queries::Linker>, rustc_driver_impl[5b4410ee4a2bc4c4]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}
  46:     0x78391b1c1da4 - rustc_interface[369fa5095bec1a52]::interface::run_compiler::<(), rustc_driver_impl[5b4410ee4a2bc4c4]::run_compiler::{closure#0}>::{closure#1}
  47:     0x78391b055987 - std[3ebcc71b08131339]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[369fa5095bec1a52]::util::run_in_thread_with_globals<rustc_interface[369fa5095bec1a52]::util::run_in_thread_pool_with_globals<rustc_interface[369fa5095bec1a52]::interface::run_compiler<(), rustc_driver_impl[5b4410ee4a2bc4c4]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
  48:     0x78391b055e24 - <<std[3ebcc71b08131339]::thread::Builder>::spawn_unchecked_<rustc_interface[369fa5095bec1a52]::util::run_in_thread_with_globals<rustc_interface[369fa5095bec1a52]::util::run_in_thread_pool_with_globals<rustc_interface[369fa5095bec1a52]::interface::run_compiler<(), rustc_driver_impl[5b4410ee4a2bc4c4]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[614645412a48dac]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  49:     0x78391b0573ef - std::sys::pal::unix::thread::Thread::new::thread_start::h5915fa5c1bb9f309
  50:     0x7839154a339d - <unknown>
  51:     0x78391552849c - <unknown>
  52:                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: please make sure that you have updated to the latest nightly

note: rustc 1.85.0-nightly (5c0a6e68c 2024-12-29) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [specialization_graph_of] building specialization graph of trait `core::cmp::Eq`
#1 [coherent_trait] coherence checking all impls of trait `core::cmp::Eq`
#2 [check_well_formed] checking that `<impl at /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:12:1: 12:57>` is well-formed
#3 [check_mod_type_wf] checking that types are well-formed in top-level module
#4 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 3 previous errors

Some errors have detailed explanations: E0277, E0601, E0658.
For more information about an error, try `rustc --explain E0277`.

```

</p>
</details>

<!--
query stack:
#0 [specialization_graph_of] building specialization graph of trait `core::cmp::Eq`
#1 [coherent_trait] coherence checking all impls of trait `core::cmp::Eq`
#2 [check_well_formed] checking that `<impl at /tmp/icemaker_global_tempdir.Z3wFfHKfangs/rustc_testrunner_tmpdir_reporting.uzq8dY128rQv/mvce.rs:12:1: 12:57>` is well-formed
#3 [check_mod_type_wf] checking that types are well-formed in top-level module
#4 [analysis] running analysis passes on this crate

-->
@rustbot label +F-specialization