// compile-flags: -Zverbose // Same as: tests/ui/generator/issue-68112.stderr #![feature(generators, generator_trait)] use std::{ cell::RefCell, sync::Arc, pin::Pin, ops::{Generator, GeneratorState}, }; pub struct Ready(Option); impl Generator<()> for Ready { type Return = T; type Yield = (); fn resume(mut self: Pin<&mut Self>, _args: ()) -> GeneratorState<(), T> { GeneratorState::Complete(self.0.take().unwrap()) } } pub fn make_gen1(t: T) -> Ready { Ready(Some(t)) } fn require_send(_: impl Send) {} fn make_non_send_generator() -> impl Generator>> { make_gen1(Arc::new(RefCell::new(0))) } fn test1() { let send_gen = || { let _non_send_gen = make_non_send_generator(); yield; }; require_send(send_gen); //~^ ERROR generator cannot be sent between threads } pub fn make_gen2(t: T) -> impl Generator { || { yield; t } } fn make_non_send_generator2() -> impl Generator>> { make_gen2(Arc::new(RefCell::new(0))) } fn test2() { let send_gen = || { let _non_send_gen = make_non_send_generator2(); yield; }; require_send(send_gen); //~^ ERROR `RefCell` cannot be shared between threads safely } fn main() {}