From 21e8710ed33ed7e77b9a0c0cc30acae6713c5173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Rakic?= Date: Fri, 29 Dec 2023 10:01:53 +0000 Subject: [PATCH] add non-regression test for issue 114325 --- ...associated-impl-trait-type-issue-114325.rs | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tests/ui/impl-trait/associated-impl-trait-type-issue-114325.rs diff --git a/tests/ui/impl-trait/associated-impl-trait-type-issue-114325.rs b/tests/ui/impl-trait/associated-impl-trait-type-issue-114325.rs new file mode 100644 index 0000000000000..8173f8df11b0c --- /dev/null +++ b/tests/ui/impl-trait/associated-impl-trait-type-issue-114325.rs @@ -0,0 +1,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; + + 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); + } +}