//@ 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) {}