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 1/2] 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); + } +} From 740378cdde88dd1fa52b8b2da4969a8ec9315f4f Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 29 Dec 2023 13:48:52 +0100 Subject: [PATCH 2/2] Rename test --- .../unused/{issue-119383.rs => issue-119383-if-let-guard.rs} | 0 .../{issue-119383.stderr => issue-119383-if-let-guard.stderr} | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename tests/ui/lint/unused/{issue-119383.rs => issue-119383-if-let-guard.rs} (100%) rename tests/ui/lint/unused/{issue-119383.stderr => issue-119383-if-let-guard.stderr} (78%) diff --git a/tests/ui/lint/unused/issue-119383.rs b/tests/ui/lint/unused/issue-119383-if-let-guard.rs similarity index 100% rename from tests/ui/lint/unused/issue-119383.rs rename to tests/ui/lint/unused/issue-119383-if-let-guard.rs diff --git a/tests/ui/lint/unused/issue-119383.stderr b/tests/ui/lint/unused/issue-119383-if-let-guard.stderr similarity index 78% rename from tests/ui/lint/unused/issue-119383.stderr rename to tests/ui/lint/unused/issue-119383-if-let-guard.stderr index 6b4d14b95d55a..5bf48bb80a8f6 100644 --- a/tests/ui/lint/unused/issue-119383.stderr +++ b/tests/ui/lint/unused/issue-119383-if-let-guard.stderr @@ -1,11 +1,11 @@ error: unused variable: `b` - --> $DIR/issue-119383.rs:6:24 + --> $DIR/issue-119383-if-let-guard.rs:6:24 | LL | () if let Some(b) = Some(()) => {} | ^ help: if this is intentional, prefix it with an underscore: `_b` | note: the lint level is defined here - --> $DIR/issue-119383.rs:2:9 + --> $DIR/issue-119383-if-let-guard.rs:2:9 | LL | #![deny(unused_variables)] | ^^^^^^^^^^^^^^^^