// Regression test for borrowck ICE #133252 //@ edition:2021 use std::future::Future; trait Owned: 'static {} fn ice() -> impl Future { async { let not_static = 0; force_send(async_load(¬_static)); //~^ ERROR implementation of `LoadQuery` is not general enough //~| ERROR `not_static` does not live long enough loop {} } } fn force_send(_: T) {} fn async_load<'a, T: LoadQuery<'a>>(this: T) -> impl Future { async { this.get_future().await; } } trait LoadQuery<'a>: Sized { type LoadFuture: Future; fn get_future(self) -> Self::LoadFuture { loop {} } } impl<'a> LoadQuery<'a> for &'a u8 { type LoadFuture = SimpleFuture; } struct SimpleFuture; impl Future for SimpleFuture { type Output = (); fn poll( self: std::pin::Pin<&mut Self>, _: &mut std::task::Context<'_>, ) -> std::task::Poll { loop {} } } fn main() {}