Skip to content

Commit

Permalink
Unrolled build for rust-lang#119406
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#119406 - lqd:issue-114325, r=compiler-errors

Add non-regression test for ATPIT ICE rust-lang#114325

ATPIT issue rust-lang#114325 had been unknowingly fixed by rust-lang#107421, so this PR adds its [MCVE](rust-lang#114325 (comment)) as a non-regression test.

Closes rust-lang#114325.
  • Loading branch information
rust-timer authored Dec 30, 2023
2 parents 3cdd004 + 21e8710 commit 0f2a1b7
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions tests/ui/impl-trait/associated-impl-trait-type-issue-114325.rs
Original file line number Diff line number Diff line change
@@ -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<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);
}
}

0 comments on commit 0f2a1b7

Please sign in to comment.