| //@ edition: 2021 |
| |
| // Test doesn't fail until monomorphization time, unfortunately. |
| //@ build-fail |
| |
| fn main() { |
| let _ = async { |
| A.first().await.second().await; |
| }; |
| } |
| |
| pub trait First { |
| type Second: Second; |
| async fn first(self) -> Self::Second; |
| } |
| |
| struct A; |
| |
| impl First for A { |
| type Second = A; |
| async fn first(self) -> Self::Second { |
| A |
| } |
| } |
| |
| pub trait Second { |
| async fn second(self); |
| } |
| |
| impl<C> Second for C |
| where |
| C: First, |
| { |
| async fn second(self) { |
| //~^ ERROR recursion in an async fn requires boxing |
| self.first().await.second().await; |
| } |
| } |