2022-06-04 07:17:34 -05:00
|
|
|
// compile-flags: -Cdebuginfo=2
|
|
|
|
// build-pass
|
|
|
|
|
|
|
|
// Regression test for #87142
|
|
|
|
// This test needs the above flags and the "lib" crate type.
|
|
|
|
|
2023-04-12 08:32:15 -05:00
|
|
|
#![feature(impl_trait_in_assoc_type, generator_trait, generators)]
|
2022-06-04 07:17:34 -05:00
|
|
|
#![crate_type = "lib"]
|
|
|
|
|
2023-10-19 11:06:43 -05:00
|
|
|
use std::ops::Coroutine;
|
2022-06-04 07:17:34 -05:00
|
|
|
|
2023-10-19 11:06:43 -05:00
|
|
|
pub trait CoroutineProviderAlt: Sized {
|
|
|
|
type Gen: Coroutine<(), Return = (), Yield = ()>;
|
2022-06-04 07:17:34 -05:00
|
|
|
|
|
|
|
fn start(ctx: Context<Self>) -> Self::Gen;
|
|
|
|
}
|
|
|
|
|
2023-10-19 11:06:43 -05:00
|
|
|
pub struct Context<G: 'static + CoroutineProviderAlt> {
|
2022-06-04 07:17:34 -05:00
|
|
|
pub link: Box<G::Gen>,
|
|
|
|
}
|
|
|
|
|
2023-10-19 11:06:43 -05:00
|
|
|
impl CoroutineProviderAlt for () {
|
|
|
|
type Gen = impl Coroutine<(), Return = (), Yield = ()>;
|
2022-06-04 07:17:34 -05:00
|
|
|
fn start(ctx: Context<Self>) -> Self::Gen {
|
|
|
|
move || {
|
|
|
|
match ctx {
|
|
|
|
_ => (),
|
|
|
|
}
|
|
|
|
yield ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|