30 lines
423 B
Rust
30 lines
423 B
Rust
|
|
// edition:2021
|
||
|
|
#![feature(negative_impls)]
|
||
|
|
#![allow(unused)]
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
gimme_send(foo());
|
||
|
|
//~^ ERROR cannot be sent between threads safely
|
||
|
|
}
|
||
|
|
|
||
|
|
fn gimme_send<T: Send>(t: T) {
|
||
|
|
drop(t);
|
||
|
|
}
|
||
|
|
|
||
|
|
struct NotSend {}
|
||
|
|
|
||
|
|
impl Drop for NotSend {
|
||
|
|
fn drop(&mut self) {}
|
||
|
|
}
|
||
|
|
|
||
|
|
impl !Send for NotSend {}
|
||
|
|
|
||
|
|
async fn foo() {
|
||
|
|
let mut x = (NotSend {},);
|
||
|
|
drop(x.0);
|
||
|
|
x.0 = NotSend {};
|
||
|
|
bar().await;
|
||
|
|
}
|
||
|
|
|
||
|
|
async fn bar() {}
|