]>
Commit | Line | Data |
---|---|---|
94b46f34 XL |
1 | // ignore-tidy-linelength |
2 | ||
3 | use std::cell::Cell; | |
4 | use std::rc::Rc; | |
5 | ||
6 | // Fast path, main can see the concrete type returned. | |
7 | fn before() -> impl Fn(i32) { | |
8 | let p = Rc::new(Cell::new(0)); | |
9 | move |x| p.set(x) | |
10 | } | |
11 | ||
12 | fn send<T: Send>(_: T) {} | |
13 | ||
14 | fn main() { | |
15 | send(before()); | |
8faf50e0 | 16 | //~^ ERROR `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely |
94b46f34 XL |
17 | |
18 | send(after()); | |
8faf50e0 | 19 | //~^ ERROR `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely |
94b46f34 XL |
20 | } |
21 | ||
22 | // Deferred path, main has to wait until typeck finishes, | |
23 | // to check if the return type of after is Send. | |
24 | fn after() -> impl Fn(i32) { | |
25 | let p = Rc::new(Cell::new(0)); | |
26 | move |x| p.set(x) | |
27 | } | |
28 |