// This is a non-regression test for issue #114325: an "unexpected unsized tail" ICE happened during // codegen, and was fixed by MIR drop tracking #107421. //@ edition: 2021 //@ build-pass: ICEd during codegen. #![feature(impl_trait_in_assoc_type)] use std::future::Future; fn main() { RuntimeRef::spawn_local(actor_fn(http_actor)); } async fn http_actor() { async fn respond(body: impl Body) { body.write_message().await; } respond(&()).await; } trait Body { type WriteFuture: Future; fn write_message(self) -> Self::WriteFuture; } impl Body for &'static () { type WriteFuture = impl Future; fn write_message(self) -> Self::WriteFuture { async {} } } trait NewActor { type RuntimeAccess; } fn actor_fn(_d: T) -> (T, A) { loop {} } impl A, A> NewActor for (F, A) { type RuntimeAccess = RuntimeRef; } struct RuntimeRef(Vec<()>); impl RuntimeRef { fn spawn_local>(_f: NA) { struct ActorFuture(NA::RuntimeAccess); (ActorFuture::(RuntimeRef(vec![])), _f); } }