//@ revisions: current next //@ ignore-compare-mode-next-solver (explicit revisions) //@[next] compile-flags: -Znext-solver //@[next] check-pass // #136824 changed cycles to be coinductive if they have at least // one productive step, causing this test to pass with the new solver. // // The cycle in the test is the following: // - `Foo: Send`, impl requires // - `T: SendIndir>`, impl requires // - `Foo: Send` cycle // // The old solver treats this cycle as inductive due to the `T: SendIndir` step. struct Foo(T); unsafe impl>> Send for Foo {} trait SendIndir {} impl SendIndir for T {} fn is_send() {} fn main() { is_send::>(); //[current]~^ ERROR overflow evaluating the requirement `u32: SendIndir>` }