2 // gate-test-generator_clone
3 // Verifies that feature(generator_clone) doesn't allow async blocks to be cloned/copied.
5 #![feature(generators, generator_clone)]
7 use std::future::ready;
12 let inner_non_clone = async {
13 let non_clone = NonClone;
14 let () = ready(()).await;
17 check_copy(&inner_non_clone);
18 //~^ ERROR : Copy` is not satisfied
19 check_clone(&inner_non_clone);
20 //~^ ERROR : Clone` is not satisfied
22 let non_clone = NonClone;
23 let outer_non_clone = async move {
26 check_copy(&outer_non_clone);
27 //~^ ERROR : Copy` is not satisfied
28 check_clone(&outer_non_clone);
29 //~^ ERROR : Clone` is not satisfied
31 let maybe_copy_clone = async move {};
32 check_copy(&maybe_copy_clone);
33 //~^ ERROR : Copy` is not satisfied
34 check_clone(&maybe_copy_clone);
35 //~^ ERROR : Clone` is not satisfied
37 let inner_non_clone_fn = the_inner_non_clone_fn();
38 check_copy(&inner_non_clone_fn);
39 //~^ ERROR : Copy` is not satisfied
40 check_clone(&inner_non_clone_fn);
41 //~^ ERROR : Clone` is not satisfied
43 let outer_non_clone_fn = the_outer_non_clone_fn(NonClone);
44 check_copy(&outer_non_clone_fn);
45 //~^ ERROR : Copy` is not satisfied
46 check_clone(&outer_non_clone_fn);
47 //~^ ERROR : Clone` is not satisfied
49 let maybe_copy_clone_fn = the_maybe_copy_clone_fn();
50 check_copy(&maybe_copy_clone_fn);
51 //~^ ERROR : Copy` is not satisfied
52 check_clone(&maybe_copy_clone_fn);
53 //~^ ERROR : Clone` is not satisfied
56 async fn the_inner_non_clone_fn() {
57 let non_clone = NonClone;
58 let () = ready(()).await;
62 async fn the_outer_non_clone_fn(non_clone: NonClone) {
63 let () = ready(()).await;
67 async fn the_maybe_copy_clone_fn() {}
69 fn check_copy<T: Copy>(_x: &T) {}
70 fn check_clone<T: Clone>(_x: &T) {}