54 lines
1006 B
Rust
54 lines
1006 B
Rust
//@ edition:2021
|
|
|
|
use std::rc::Rc;
|
|
|
|
async fn foo(x: Option<bool>) {
|
|
let Some(_) = x else {
|
|
let r = Rc::new(());
|
|
bar().await
|
|
};
|
|
}
|
|
|
|
async fn bar() -> ! {
|
|
panic!()
|
|
}
|
|
|
|
fn is_send<T: Send>(_: T) {}
|
|
|
|
async fn foo2(x: Option<bool>) {
|
|
let Some(_) = x else {
|
|
bar2(Rc::new(())).await
|
|
};
|
|
}
|
|
|
|
async fn bar2<T>(_: T) -> ! {
|
|
panic!()
|
|
}
|
|
|
|
async fn foo3(x: Option<bool>) {
|
|
let Some(_) = x else {
|
|
(Rc::new(()), bar().await);
|
|
return;
|
|
};
|
|
}
|
|
|
|
async fn foo4(x: Option<bool>) {
|
|
let Some(_) = x else {
|
|
let r = Rc::new(());
|
|
bar().await;
|
|
println!("{:?}", r);
|
|
return;
|
|
};
|
|
}
|
|
|
|
fn main() {
|
|
is_send(foo(Some(true)));
|
|
//~^ ERROR cannot be sent between threads safely
|
|
is_send(foo2(Some(true)));
|
|
//~^ ERROR cannot be sent between threads safely
|
|
is_send(foo3(Some(true)));
|
|
//~^ ERROR cannot be sent between threads safely
|
|
is_send(foo4(Some(true)));
|
|
//~^ ERROR cannot be sent between threads safely
|
|
}
|