//@ revisions: current next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver //@[next] known-bug: #92505 //@[current] check-pass trait Trait { type Assoc; } impl Trait for T { type Assoc = T; } fn impls_trait() {} fn foo() where ::Assoc: Trait, { // Trying to use `::Assoc: Trait` to prove `T: Trait` // requires normalizing `::Assoc`. We do not normalize // using impl candidates if there's a where-bound for that trait. // // We therefore check whether `T: Trait` is proven by the environment. // For that we try to apply the `::Assoc: Trait` candidate, // trying to normalize its self type results in overflow. // // In the old solver we eagerly normalize the environment, ignoring the // unnormalized `::Assoc: Trait` where-bound when normalizing // `::Asosc` impls_trait::(); } fn main() {}