]> git.proxmox.com Git - rustc.git/blame - src/test/ui/impl-trait/auto-trait-leak2.rs
New upstream version 1.33.0+dfsg1
[rustc.git] / src / test / ui / impl-trait / auto-trait-leak2.rs
CommitLineData
94b46f34
XL
1// ignore-tidy-linelength
2
3use std::cell::Cell;
4use std::rc::Rc;
5
6// Fast path, main can see the concrete type returned.
7fn before() -> impl Fn(i32) {
8 let p = Rc::new(Cell::new(0));
9 move |x| p.set(x)
10}
11
12fn send<T: Send>(_: T) {}
13
14fn 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.
24fn after() -> impl Fn(i32) {
25 let p = Rc::new(Cell::new(0));
26 move |x| p.set(x)
27}
28