1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
// 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<Output = ()>;
fn write_message(self) -> Self::WriteFuture {
async {}
}
}
trait NewActor {
type RuntimeAccess;
}
fn actor_fn<T, A>(_d: T) -> (T, A) {
loop {}
}
impl<F: FnMut() -> A, A> NewActor for (F, A) {
type RuntimeAccess = RuntimeRef;
}
struct RuntimeRef(Vec<()>);
impl RuntimeRef {
fn spawn_local<NA: NewActor<RuntimeAccess = RuntimeRef>>(_f: NA) {
struct ActorFuture<NA: NewActor>(NA::RuntimeAccess);
(ActorFuture::<NA>(RuntimeRef(vec![])), _f);
}
}
|