//@ edition:2018 //@ revisions: rpass1 // Regression test for #86753. The `type_implements_trait` query (since moved to a method) // was encountering an ICE during incremental testing when hashing its arguments. #![warn(rust_2021_compatibility)] use std::future::Future; use std::pin::Pin; use std::task::{Poll, Context}; struct LocalSet {} struct RunUntil<'a, F> { _local_set: &'a LocalSet, _future: F, } impl<'a, F> RunUntil<'a, F> { fn project<'pin>(self: Pin<&'pin mut Self>) -> Projection<'pin, 'a, F> { unimplemented!() } } struct Projection<'pin, 'a, F> where RunUntil<'a, F>: 'pin, { pub local_set: &'pin mut &'a LocalSet, pub future: Pin<&'pin mut F>, } impl LocalSet { fn with(&self, _f: impl FnOnce() -> T) -> T { unimplemented!() } } impl Future for RunUntil<'_, T> { type Output = T::Output; fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { let me = self.project(); me.local_set.with(|| { let _ = cx.waker(); let f = me.future; let _ = f.poll(cx); Poll::Pending }) } } fn main() {}