// compile-flags: -Ztrait-solver=next // Proving `W: Trait` instantiates `?0` with `(W, W)` and then // proves `W: Trait` and `W: Trait`, resulting in a coinductive cycle. // // Proving coinductive cycles runs until we reach a fixpoint. This fixpoint is // never reached here and each step doubles the amount of nested obligations. // // This previously caused a hang in the trait solver, see // https://github.com/rust-lang/trait-system-refactor-initiative/issues/13. #![feature(rustc_attrs)] #[rustc_coinductive] trait Trait {} struct W(T); impl Trait for W<(W, W)> where W: Trait, W: Trait, { } fn impls() {} fn main() { impls::>(); //~^ ERROR type annotations needed //~| ERROR overflow evaluating the requirement }