]> git.proxmox.com Git - rustc.git/blob - tests/ui/generator/print/generator-print-verbose-1.rs
New upstream version 1.74.1+dfsg1
[rustc.git] / tests / ui / generator / print / generator-print-verbose-1.rs
1 // compile-flags: -Zverbose
2
3 // Same as: tests/ui/generator/issue-68112.stderr
4
5 #![feature(generators, generator_trait)]
6
7 use std::{
8 cell::RefCell,
9 sync::Arc,
10 pin::Pin,
11 ops::{Generator, GeneratorState},
12 };
13
14 pub struct Ready<T>(Option<T>);
15 impl<T: Unpin> Generator<()> for Ready<T> {
16 type Return = T;
17 type Yield = ();
18 fn resume(mut self: Pin<&mut Self>, _args: ()) -> GeneratorState<(), T> {
19 GeneratorState::Complete(self.0.take().unwrap())
20 }
21 }
22 pub fn make_gen1<T>(t: T) -> Ready<T> {
23 Ready(Some(t))
24 }
25
26 fn require_send(_: impl Send) {}
27
28 fn make_non_send_generator() -> impl Generator<Return = Arc<RefCell<i32>>> {
29 make_gen1(Arc::new(RefCell::new(0)))
30 }
31
32 fn test1() {
33 let send_gen = || {
34 let _non_send_gen = make_non_send_generator();
35 yield;
36 };
37 require_send(send_gen);
38 //~^ ERROR generator cannot be sent between threads
39 }
40
41 pub fn make_gen2<T>(t: T) -> impl Generator<Return = T> {
42 || {
43 yield;
44 t
45 }
46 }
47 fn make_non_send_generator2() -> impl Generator<Return = Arc<RefCell<i32>>> {
48 make_gen2(Arc::new(RefCell::new(0)))
49 }
50
51 fn test2() {
52 let send_gen = || {
53 let _non_send_gen = make_non_send_generator2();
54 yield;
55 };
56 require_send(send_gen);
57 //~^ ERROR `RefCell<i32>` cannot be shared between threads safely
58 }
59
60 fn main() {}