//@ revisions: current next //@[next] compile-flags: -Znext-solver //@ ignore-compare-mode-next-solver (explicit revisions) //@[current] check-pass fn prove_proj(_: impl FnOnce() -> R) {} fn recur<'a>() -> impl Sized + 'a { // The closure has the signature `fn() -> opaque<'1>`. `prove_proj` // requires us to prove `>::Output = opaque<'2>`. // The old solver uses `replace_opaque_types_with_infer` during normalization // to replace `opaque<'2>` with its hidden type. If that hidden type is still an // inference variable at this point, we unify it with `opaque<'1>` and // end up ignoring that defining use as the hidden type is equal to its key. prove_proj(|| recur()); //[next]~^ ERROR non-defining use of `impl Sized + '_` in the defining scope } fn main() {}