|  | // Regression test for borrowck ICE #133252 | 
|  | //@ edition:2021 | 
|  | use std::future::Future; | 
|  |  | 
|  | trait Owned: 'static {} | 
|  | fn ice() -> impl Future<Output = &'static dyn Owned> { | 
|  | 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: 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<Self::Output> { | 
|  | loop {} | 
|  | } | 
|  | } | 
|  |  | 
|  | fn main() {} |