//@ 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 Second for C where C: First, { async fn second(self) { //~^ ERROR recursion in an async fn requires boxing self.first().await.second().await; } }