| //@ check-pass |
| #![feature(negative_impls, coroutines, stmt_expr_attributes)] |
| |
| struct Foo; |
| impl !Send for Foo {} |
| |
| struct Bar { |
| foo: Foo, |
| x: i32, |
| } |
| |
| fn main() { |
| assert_send( |
| #[coroutine] |
| || { |
| let guard = Bar { foo: Foo, x: 42 }; |
| drop(guard.foo); |
| yield; |
| }, |
| ); |
| |
| assert_send( |
| #[coroutine] |
| || { |
| let mut guard = Bar { foo: Foo, x: 42 }; |
| drop(guard); |
| guard = Bar { foo: Foo, x: 23 }; |
| yield; |
| }, |
| ); |
| |
| assert_send( |
| #[coroutine] |
| || { |
| let guard = Bar { foo: Foo, x: 42 }; |
| let Bar { foo, x } = guard; |
| drop(foo); |
| yield; |
| }, |
| ); |
| } |
| |
| fn assert_send<T: Send>(_: T) {} |