diff --git a/tokio/src/loom/std/parking_lot.rs b/tokio/src/loom/std/parking_lot.rs index 6a8375b0787..45b567b9605 100644 --- a/tokio/src/loom/std/parking_lot.rs +++ b/tokio/src/loom/std/parking_lot.rs @@ -6,6 +6,7 @@ use std::fmt; use std::marker::PhantomData; use std::ops::{Deref, DerefMut}; +use std::panic; use std::sync::LockResult; use std::time::Duration; @@ -45,6 +46,37 @@ pub(crate) struct RwLockWriteGuard<'a, T: ?Sized>( parking_lot::RwLockWriteGuard<'a, T>, ); +// `UnwindSafe` and `RefUnwindSafe` traits have been +// adjusted to match values from std for wrapped types. +// +// See for more info. + +// parking_lot's `Mutex` is UnwindSafe and !RefUnwindSafe +// std's `Mutex` is UnwindSafe and RefUnwindSafe +impl panic::RefUnwindSafe for Mutex {} + +// parking_lot's `MutexGuard` is !UnwindSafe and !RefUnwindSafe +// std's `MutexGuard` is UnwindSafe and RefUnwindSafe +impl panic::UnwindSafe for MutexGuard<'_, T> {} +impl panic::RefUnwindSafe for MutexGuard<'_, T> {} + +// parking_lot's `RwLock` is UnwindSafe and !RefUnwindSafe +// std's `RwLock` is UnwindSafe and RefUnwindSafe +impl panic::RefUnwindSafe for RwLock {} + +// parking_lot's `RwLockReadGuard` is !UnwindSafe and !RefUnwindSafe +// std's `RwLockReadGuard` is UnwindSafe and RefUnwindSafe +impl panic::UnwindSafe for RwLockReadGuard<'_, T> {} +impl panic::RefUnwindSafe for RwLockReadGuard<'_, T> {} + +// parking_lot's `RwLockWriteGuard` is !UnwindSafe and !RefUnwindSafe +// std's `RwLockWriteGuard` is UnwindSafe and RefUnwindSafe +impl panic::UnwindSafe for RwLockWriteGuard<'_, T> {} +impl panic::RefUnwindSafe for RwLockWriteGuard<'_, T> {} + +// parking_lot's `Condvar` is UnwindSafe and RefUnwindSafe +// std's `Condwar` is UnwindSafe and RefUnwindSafe + impl Mutex { #[inline] pub(crate) fn new(t: T) -> Mutex { diff --git a/tokio/src/util/linked_list.rs b/tokio/src/util/linked_list.rs index 3650f87fbb0..58cf79fd575 100644 --- a/tokio/src/util/linked_list.rs +++ b/tokio/src/util/linked_list.rs @@ -11,6 +11,7 @@ use core::fmt; use core::marker::{PhantomData, PhantomPinned}; use core::mem::ManuallyDrop; use core::ptr::{self, NonNull}; +use std::panic::UnwindSafe; /// An intrusive linked list. /// @@ -29,6 +30,7 @@ pub(crate) struct LinkedList { unsafe impl Send for LinkedList where L::Target: Send {} unsafe impl Sync for LinkedList where L::Target: Sync {} +impl UnwindSafe for LinkedList {} /// Defines how a type is tracked within a linked list. /// diff --git a/tokio/tests/async_send_sync.rs b/tokio/tests/async_send_sync.rs index 19cc6aed711..8dc340a5305 100644 --- a/tokio/tests/async_send_sync.rs +++ b/tokio/tests/async_send_sync.rs @@ -6,6 +6,7 @@ use std::cell::Cell; use std::future::Future; use std::io::SeekFrom; use std::net::SocketAddr; +use std::panic::{RefUnwindSafe, UnwindSafe}; use std::pin::Pin; use std::rc::Rc; use tokio::net::TcpStream; @@ -21,14 +22,15 @@ struct YY {} #[derive(Clone)] #[allow(unused)] struct YN { - _value: Cell, + _value: *mut i32, } +unsafe impl Send for YN {} // Send: No, Sync: No #[derive(Clone)] #[allow(unused)] struct NN { - _value: Rc, + _value: *mut i32, } #[allow(dead_code)] @@ -51,6 +53,10 @@ fn require_send(_t: &T) {} fn require_sync(_t: &T) {} #[allow(dead_code)] fn require_unpin(_t: &T) {} +#[allow(dead_code)] +fn require_unwind_safe(_t: &T) {} +#[allow(dead_code)] +fn require_ref_unwind_safe(_t: &T) {} #[allow(dead_code)] struct Invalid; @@ -76,6 +82,20 @@ trait AmbiguousIfUnpin { impl AmbiguousIfUnpin<()> for T {} impl AmbiguousIfUnpin for T {} +#[allow(unused)] +trait AmbiguousIfUnwindSafe { + fn some_item(&self) {} +} +impl AmbiguousIfUnwindSafe<()> for T {} +impl AmbiguousIfUnwindSafe for T {} + +#[allow(unused)] +trait AmbiguousIfRefUnwindSafe { + fn some_item(&self) {} +} +impl AmbiguousIfRefUnwindSafe<()> for T {} +impl AmbiguousIfRefUnwindSafe for T {} + macro_rules! into_todo { ($typ:ty) => {{ let x: $typ = todo!(); @@ -84,29 +104,45 @@ macro_rules! into_todo { } macro_rules! async_assert_fn_send { - (Send & $(!)?Sync & $(!)?Unpin, $value:expr) => { + (Send & $(!)?Sync & $(!)?Unpin & $(!)?UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { require_send(&$value); }; - (!Send & $(!)?Sync & $(!)?Unpin, $value:expr) => { + (!Send & $(!)?Sync & $(!)?Unpin & $(!)?UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { AmbiguousIfSend::some_item(&$value); }; } macro_rules! async_assert_fn_sync { - ($(!)?Send & Sync & $(!)?Unpin, $value:expr) => { + ($(!)?Send & Sync & $(!)?Unpin & $(!)?UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { require_sync(&$value); }; - ($(!)?Send & !Sync & $(!)?Unpin, $value:expr) => { + ($(!)?Send & !Sync & $(!)?Unpin & $(!)?UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { AmbiguousIfSync::some_item(&$value); }; } macro_rules! async_assert_fn_unpin { - ($(!)?Send & $(!)?Sync & Unpin, $value:expr) => { + ($(!)?Send & $(!)?Sync & Unpin & $(!)?UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { require_unpin(&$value); }; - ($(!)?Send & $(!)?Sync & !Unpin, $value:expr) => { + ($(!)?Send & $(!)?Sync & !Unpin & $(!)?UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { AmbiguousIfUnpin::some_item(&$value); }; } +macro_rules! async_assert_fn_unwind_safe { + ($(!)?Send & $(!)?Sync & $(!)?Unpin & UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { + require_unwind_safe(&$value); + }; + ($(!)?Send & $(!)?Sync & $(!)?Unpin & !UnwindSafe & $(!)?RefUnwindSafe, $value:expr) => { + AmbiguousIfUnwindSafe::some_item(&$value); + }; +} +macro_rules! async_assert_fn_ref_unwind_safe { + ($(!)?Send & $(!)?Sync & $(!)?Unpin & $(!)?UnwindSafe & RefUnwindSafe, $value:expr) => { + require_ref_unwind_safe(&$value); + }; + ($(!)?Send & $(!)?Sync & $(!)?Unpin & $(!)?UnwindSafe & !RefUnwindSafe, $value:expr) => { + AmbiguousIfRefUnwindSafe::some_item(&$value); + }; +} macro_rules! async_assert_fn { ($($f:ident $(< $($generic:ty),* > )? )::+($($arg:ty),*): $($tok:tt)*) => { @@ -117,6 +153,8 @@ macro_rules! async_assert_fn { async_assert_fn_send!($($tok)*, f); async_assert_fn_sync!($($tok)*, f); async_assert_fn_unpin!($($tok)*, f); + async_assert_fn_unwind_safe!($($tok)*, f); + async_assert_fn_ref_unwind_safe!($($tok)*, f); }; }; } @@ -129,6 +167,8 @@ macro_rules! assert_value { async_assert_fn_send!($($tok)*, f); async_assert_fn_sync!($($tok)*, f); async_assert_fn_unpin!($($tok)*, f); + async_assert_fn_unwind_safe!($($tok)*, f); + async_assert_fn_ref_unwind_safe!($($tok)*, f); }; }; } @@ -160,575 +200,591 @@ const _: fn() = || { cfg_not_wasi! { mod fs { use super::*; - assert_value!(tokio::fs::DirBuilder: Send & Sync & Unpin); - assert_value!(tokio::fs::DirEntry: Send & Sync & Unpin); - assert_value!(tokio::fs::File: Send & Sync & Unpin); - assert_value!(tokio::fs::OpenOptions: Send & Sync & Unpin); - assert_value!(tokio::fs::ReadDir: Send & Sync & Unpin); - - async_assert_fn!(tokio::fs::canonicalize(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::copy(&str, &str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::create_dir(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::create_dir_all(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::hard_link(&str, &str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::metadata(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::read(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::read_dir(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::read_link(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::read_to_string(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::remove_dir(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::remove_dir_all(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::remove_file(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::rename(&str, &str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::set_permissions(&str, std::fs::Permissions): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::symlink_metadata(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::write(&str, Vec): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::ReadDir::next_entry(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::OpenOptions::open(_, &str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::DirBuilder::create(_, &str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::DirEntry::metadata(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::DirEntry::file_type(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::open(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::create(&str): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::sync_all(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::sync_data(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::set_len(_, u64): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::metadata(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::try_clone(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::fs::File::into_std(_): Send & Sync & !Unpin); + assert_value!(tokio::fs::DirBuilder: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(tokio::fs::DirEntry: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(tokio::fs::File: Send & Sync & Unpin & UnwindSafe & !RefUnwindSafe); + assert_value!(tokio::fs::OpenOptions: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(tokio::fs::ReadDir: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + + async_assert_fn!(tokio::fs::canonicalize(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::copy(&str, &str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::create_dir(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::create_dir_all(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::hard_link(&str, &str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::metadata(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::read(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::read_dir(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::read_link(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::read_to_string(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::remove_dir(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::remove_dir_all(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::remove_file(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::rename(&str, &str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::set_permissions(&str, std::fs::Permissions): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::symlink_metadata(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::write(&str, Vec): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::ReadDir::next_entry(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::fs::OpenOptions::open(_, &str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::DirBuilder::create(_, &str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::DirEntry::metadata(_): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::DirEntry::file_type(_): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::File::open(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::File::create(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::fs::File::sync_all(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::fs::File::sync_data(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::fs::File::set_len(_, u64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::fs::File::metadata(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::fs::File::try_clone(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::fs::File::into_std(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); async_assert_fn!( - tokio::fs::File::set_permissions(_, std::fs::Permissions): Send & Sync & !Unpin + tokio::fs::File::set_permissions(_, std::fs::Permissions): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); } } cfg_not_wasi! { - assert_value!(tokio::net::TcpSocket: Send & Sync & Unpin); - async_assert_fn!(tokio::net::TcpListener::bind(SocketAddr): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::TcpStream::connect(SocketAddr): Send & Sync & !Unpin); + assert_value!(tokio::net::TcpSocket: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::net::TcpListener::bind(SocketAddr): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::TcpStream::connect(SocketAddr): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } -assert_value!(tokio::net::TcpListener: Send & Sync & Unpin); -assert_value!(tokio::net::TcpStream: Send & Sync & Unpin); -assert_value!(tokio::net::tcp::OwnedReadHalf: Send & Sync & Unpin); -assert_value!(tokio::net::tcp::OwnedWriteHalf: Send & Sync & Unpin); -assert_value!(tokio::net::tcp::ReadHalf<'_>: Send & Sync & Unpin); -assert_value!(tokio::net::tcp::ReuniteError: Send & Sync & Unpin); -assert_value!(tokio::net::tcp::WriteHalf<'_>: Send & Sync & Unpin); -async_assert_fn!(tokio::net::TcpListener::accept(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::net::TcpStream::peek(_, &mut [u8]): Send & Sync & !Unpin); -async_assert_fn!(tokio::net::TcpStream::readable(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::net::TcpStream::ready(_, tokio::io::Interest): Send & Sync & !Unpin); -async_assert_fn!(tokio::net::TcpStream::writable(_): Send & Sync & !Unpin); +assert_value!(tokio::net::TcpListener: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::net::TcpStream: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::net::tcp::OwnedReadHalf: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::net::tcp::OwnedWriteHalf: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::net::tcp::ReadHalf<'_>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::net::tcp::ReuniteError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::net::tcp::WriteHalf<'_>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::net::TcpListener::accept(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::net::TcpStream::peek(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::net::TcpStream::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::net::TcpStream::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::net::TcpStream::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); // Wasi does not support UDP cfg_not_wasi! { mod udp_socket { use super::*; - assert_value!(tokio::net::UdpSocket: Send & Sync & Unpin); - async_assert_fn!(tokio::net::UdpSocket::bind(SocketAddr): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::connect(_, SocketAddr): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::peek_from(_, &mut [u8]): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::readable(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::recv(_, &mut [u8]): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::recv_from(_, &mut [u8]): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::send(_, &[u8]): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::send_to(_, &[u8], SocketAddr): Send & Sync & !Unpin); - async_assert_fn!(tokio::net::UdpSocket::writable(_): Send & Sync & !Unpin); + assert_value!(tokio::net::UdpSocket: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::bind(SocketAddr): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::connect(_, SocketAddr): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::peek_from(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::recv(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::recv_from(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::send(_, &[u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::send_to(_, &[u8], SocketAddr): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::net::UdpSocket::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } } -async_assert_fn!(tokio::net::lookup_host(SocketAddr): Send & Sync & !Unpin); -async_assert_fn!(tokio::net::tcp::ReadHalf::peek(_, &mut [u8]): Send & Sync & !Unpin); +async_assert_fn!(tokio::net::lookup_host(SocketAddr): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::net::tcp::ReadHalf::peek(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); #[cfg(unix)] mod unix_datagram { use super::*; use tokio::net::*; - assert_value!(UnixDatagram: Send & Sync & Unpin); - assert_value!(UnixListener: Send & Sync & Unpin); - assert_value!(UnixStream: Send & Sync & Unpin); - assert_value!(unix::OwnedReadHalf: Send & Sync & Unpin); - assert_value!(unix::OwnedWriteHalf: Send & Sync & Unpin); - assert_value!(unix::ReadHalf<'_>: Send & Sync & Unpin); - assert_value!(unix::ReuniteError: Send & Sync & Unpin); - assert_value!(unix::SocketAddr: Send & Sync & Unpin); - assert_value!(unix::UCred: Send & Sync & Unpin); - assert_value!(unix::WriteHalf<'_>: Send & Sync & Unpin); - async_assert_fn!(UnixDatagram::readable(_): Send & Sync & !Unpin); - async_assert_fn!(UnixDatagram::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(UnixDatagram::recv(_, &mut [u8]): Send & Sync & !Unpin); - async_assert_fn!(UnixDatagram::recv_from(_, &mut [u8]): Send & Sync & !Unpin); - async_assert_fn!(UnixDatagram::send(_, &[u8]): Send & Sync & !Unpin); - async_assert_fn!(UnixDatagram::send_to(_, &[u8], &str): Send & Sync & !Unpin); - async_assert_fn!(UnixDatagram::writable(_): Send & Sync & !Unpin); - async_assert_fn!(UnixListener::accept(_): Send & Sync & !Unpin); - async_assert_fn!(UnixStream::connect(&str): Send & Sync & !Unpin); - async_assert_fn!(UnixStream::readable(_): Send & Sync & !Unpin); - async_assert_fn!(UnixStream::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(UnixStream::writable(_): Send & Sync & !Unpin); + assert_value!(UnixDatagram: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(UnixListener: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(UnixStream: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::OwnedReadHalf: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::OwnedWriteHalf: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::ReadHalf<'_>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::ReuniteError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::SocketAddr: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::UCred: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(unix::WriteHalf<'_>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(UnixDatagram::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixDatagram::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixDatagram::recv(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixDatagram::recv_from(_, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixDatagram::send(_, &[u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixDatagram::send_to(_, &[u8], &str): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixDatagram::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixListener::accept(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixStream::connect(&str): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(UnixStream::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixStream::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(UnixStream::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } #[cfg(unix)] mod unix_pipe { use super::*; use tokio::net::unix::pipe::*; - assert_value!(OpenOptions: Send & Sync & Unpin); - assert_value!(Receiver: Send & Sync & Unpin); - assert_value!(Sender: Send & Sync & Unpin); - async_assert_fn!(Receiver::readable(_): Send & Sync & !Unpin); - async_assert_fn!(Receiver::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(Sender::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(Sender::writable(_): Send & Sync & !Unpin); + assert_value!(OpenOptions: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(Receiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(Sender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(Receiver::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(Receiver::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(Sender::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(Sender::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } #[cfg(windows)] mod windows_named_pipe { use super::*; use tokio::net::windows::named_pipe::*; - assert_value!(ClientOptions: Send & Sync & Unpin); - assert_value!(NamedPipeClient: Send & Sync & Unpin); - assert_value!(NamedPipeServer: Send & Sync & Unpin); - assert_value!(PipeEnd: Send & Sync & Unpin); - assert_value!(PipeInfo: Send & Sync & Unpin); - assert_value!(PipeMode: Send & Sync & Unpin); - assert_value!(ServerOptions: Send & Sync & Unpin); - async_assert_fn!(NamedPipeClient::readable(_): Send & Sync & !Unpin); - async_assert_fn!(NamedPipeClient::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(NamedPipeClient::writable(_): Send & Sync & !Unpin); - async_assert_fn!(NamedPipeServer::connect(_): Send & Sync & !Unpin); - async_assert_fn!(NamedPipeServer::readable(_): Send & Sync & !Unpin); - async_assert_fn!(NamedPipeServer::ready(_, tokio::io::Interest): Send & Sync & !Unpin); - async_assert_fn!(NamedPipeServer::writable(_): Send & Sync & !Unpin); + assert_value!(ClientOptions: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(NamedPipeClient: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(NamedPipeServer: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(PipeEnd: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(PipeInfo: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(PipeMode: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(ServerOptions: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(NamedPipeClient::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(NamedPipeClient::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(NamedPipeClient::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(NamedPipeServer::connect(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(NamedPipeServer::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(NamedPipeServer::ready(_, tokio::io::Interest): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(NamedPipeServer::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +} + +#[cfg(unix)] +mod unix_command { + use super::*; + assert_value!(tokio::process::Command: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +} + +#[cfg(windows)] +mod windows_command { + use super::*; + assert_value!(tokio::process::Command: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); } cfg_not_wasi! { mod test_process { use super::*; - assert_value!(tokio::process::Child: Send & Sync & Unpin); - assert_value!(tokio::process::ChildStderr: Send & Sync & Unpin); - assert_value!(tokio::process::ChildStdin: Send & Sync & Unpin); - assert_value!(tokio::process::ChildStdout: Send & Sync & Unpin); - assert_value!(tokio::process::Command: Send & Sync & Unpin); - async_assert_fn!(tokio::process::Child::kill(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::process::Child::wait(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::process::Child::wait_with_output(_): Send & Sync & !Unpin); + assert_value!(tokio::process::Child: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(tokio::process::ChildStderr: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(tokio::process::ChildStdin: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(tokio::process::ChildStdout: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::process::Child::kill(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::process::Child::wait(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::process::Child::wait_with_output(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } - async_assert_fn!(tokio::signal::ctrl_c(): Send & Sync & !Unpin); + async_assert_fn!(tokio::signal::ctrl_c(): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } #[cfg(unix)] mod unix_signal { use super::*; - assert_value!(tokio::signal::unix::Signal: Send & Sync & Unpin); - assert_value!(tokio::signal::unix::SignalKind: Send & Sync & Unpin); - async_assert_fn!(tokio::signal::unix::Signal::recv(_): Send & Sync & !Unpin); + assert_value!(tokio::signal::unix::Signal: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(tokio::signal::unix::SignalKind: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(tokio::signal::unix::Signal::recv(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } #[cfg(windows)] mod windows_signal { use super::*; - assert_value!(tokio::signal::windows::CtrlC: Send & Sync & Unpin); - assert_value!(tokio::signal::windows::CtrlBreak: Send & Sync & Unpin); - async_assert_fn!(tokio::signal::windows::CtrlC::recv(_): Send & Sync & !Unpin); - async_assert_fn!(tokio::signal::windows::CtrlBreak::recv(_): Send & Sync & !Unpin); + assert_value!(tokio::signal::windows::CtrlC: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(tokio::signal::windows::CtrlBreak: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::signal::windows::CtrlC::recv(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(tokio::signal::windows::CtrlBreak::recv(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } -assert_value!(tokio::sync::AcquireError: Send & Sync & Unpin); -assert_value!(tokio::sync::Barrier: Send & Sync & Unpin); -assert_value!(tokio::sync::BarrierWaitResult: Send & Sync & Unpin); -assert_value!(tokio::sync::MappedMutexGuard<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::MappedMutexGuard<'_, YN>: Send & !Sync & Unpin); -assert_value!(tokio::sync::MappedMutexGuard<'_, YY>: Send & Sync & Unpin); -assert_value!(tokio::sync::Mutex: !Send & !Sync & Unpin); -assert_value!(tokio::sync::Mutex: Send & Sync & Unpin); -assert_value!(tokio::sync::Mutex: Send & Sync & Unpin); -assert_value!(tokio::sync::MutexGuard<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::MutexGuard<'_, YN>: Send & !Sync & Unpin); -assert_value!(tokio::sync::MutexGuard<'_, YY>: Send & Sync & Unpin); -assert_value!(tokio::sync::Notify: Send & Sync & Unpin); -assert_value!(tokio::sync::OnceCell: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OnceCell: Send & !Sync & Unpin); -assert_value!(tokio::sync::OnceCell: Send & Sync & Unpin); -assert_value!(tokio::sync::SetOnce: !Send & !Sync & Unpin); -assert_value!(tokio::sync::SetOnce: Send & !Sync & Unpin); -assert_value!(tokio::sync::SetOnce: Send & Sync & Unpin); -assert_value!(tokio::sync::OwnedMutexGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMutexGuard: Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMutexGuard: Send & Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedMappedMutexGuard: Send & Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockMappedWriteGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockMappedWriteGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockMappedWriteGuard: Send & Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockReadGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockReadGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockReadGuard: Send & Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockWriteGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockWriteGuard: !Send & !Sync & Unpin); -assert_value!(tokio::sync::OwnedRwLockWriteGuard: Send & Sync & Unpin); -assert_value!(tokio::sync::OwnedSemaphorePermit: Send & Sync & Unpin); -assert_value!(tokio::sync::RwLock: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLock: Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLock: Send & Sync & Unpin); -assert_value!(tokio::sync::RwLockMappedWriteGuard<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLockMappedWriteGuard<'_, YN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLockMappedWriteGuard<'_, YY>: Send & Sync & Unpin); -assert_value!(tokio::sync::RwLockReadGuard<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLockReadGuard<'_, YN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLockReadGuard<'_, YY>: Send & Sync & Unpin); -assert_value!(tokio::sync::RwLockWriteGuard<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLockWriteGuard<'_, YN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::RwLockWriteGuard<'_, YY>: Send & Sync & Unpin); -assert_value!(tokio::sync::Semaphore: Send & Sync & Unpin); -assert_value!(tokio::sync::SemaphorePermit<'_>: Send & Sync & Unpin); -assert_value!(tokio::sync::TryAcquireError: Send & Sync & Unpin); -assert_value!(tokio::sync::TryLockError: Send & Sync & Unpin); -assert_value!(tokio::sync::broadcast::Receiver: !Send & !Sync & Unpin); -assert_value!(tokio::sync::broadcast::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::broadcast::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::broadcast::Sender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::broadcast::Sender: Send & Sync & Unpin); -assert_value!(tokio::sync::broadcast::Sender: Send & Sync & Unpin); -assert_value!(tokio::sync::broadcast::WeakSender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::broadcast::WeakSender: Send & Sync & Unpin); -assert_value!(tokio::sync::broadcast::WeakSender: Send & Sync & Unpin); -assert_value!(tokio::sync::futures::Notified<'_>: Send & Sync & !Unpin); -assert_value!(tokio::sync::futures::OwnedNotified: Send & Sync & !Unpin); -assert_value!(tokio::sync::mpsc::OwnedPermit: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::OwnedPermit: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::OwnedPermit: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::Permit<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::Permit<'_, YN>: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::Permit<'_, YY>: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::Receiver: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::Sender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::Sender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::Sender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::UnboundedReceiver: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::UnboundedReceiver: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::UnboundedReceiver: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::UnboundedSender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::UnboundedSender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::UnboundedSender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::WeakSender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::WeakSender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::WeakSender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::WeakUnboundedSender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::WeakUnboundedSender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::WeakUnboundedSender: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::SendError: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::SendError: Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::SendError: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::SendTimeoutError: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::SendTimeoutError: Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::SendTimeoutError: Send & Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::TrySendError: !Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::TrySendError: Send & !Sync & Unpin); -assert_value!(tokio::sync::mpsc::error::TrySendError: Send & Sync & Unpin); -assert_value!(tokio::sync::oneshot::Receiver: !Send & !Sync & Unpin); -assert_value!(tokio::sync::oneshot::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::oneshot::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::oneshot::Sender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::oneshot::Sender: Send & Sync & Unpin); -assert_value!(tokio::sync::oneshot::Sender: Send & Sync & Unpin); -assert_value!(tokio::sync::watch::Receiver: !Send & !Sync & Unpin); -assert_value!(tokio::sync::watch::Receiver: !Send & !Sync & Unpin); -assert_value!(tokio::sync::watch::Receiver: Send & Sync & Unpin); -assert_value!(tokio::sync::watch::Ref<'_, NN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::watch::Ref<'_, YN>: !Send & !Sync & Unpin); -assert_value!(tokio::sync::watch::Ref<'_, YY>: !Send & Sync & Unpin); -assert_value!(tokio::sync::watch::Sender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::watch::Sender: !Send & !Sync & Unpin); -assert_value!(tokio::sync::watch::Sender: Send & Sync & Unpin); -assert_value!(tokio::task::JoinError: Send & Sync & Unpin); -assert_value!(tokio::task::JoinHandle: !Send & !Sync & Unpin); -assert_value!(tokio::task::JoinHandle: Send & Sync & Unpin); -assert_value!(tokio::task::JoinHandle: Send & Sync & Unpin); -assert_value!(tokio::task::JoinSet: !Send & !Sync & Unpin); -assert_value!(tokio::task::JoinSet: Send & Sync & Unpin); -assert_value!(tokio::task::JoinSet: Send & Sync & Unpin); -assert_value!(tokio::task::LocalSet: !Send & !Sync & Unpin); -assert_value!(tokio::task::coop::RestoreOnPending: !Send & !Sync & Unpin); -async_assert_fn!(tokio::sync::Barrier::wait(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Mutex::lock(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::Mutex::lock_owned(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::Mutex::lock(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Mutex::lock_owned(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Mutex::lock(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Mutex::lock_owned(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Notify::notified(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send + Sync>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send + Sync>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin>>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send + Sync>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send + Sync>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin>>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send + Sync>>): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send>>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send + Sync>>): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send>>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin>>>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::SetOnce::wait(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::SetOnce::wait(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::SetOnce::wait(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::RwLock::read(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::RwLock::write(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::RwLock::read(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::RwLock::write(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::RwLock::read(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::RwLock::write(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Semaphore::acquire(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Semaphore::acquire_many(_, u32): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Semaphore::acquire_many_owned(_, u32): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::Semaphore::acquire_owned(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::broadcast::Receiver::recv(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::broadcast::Receiver::recv(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::broadcast::Receiver::recv(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Receiver::recv(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Receiver::recv(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Receiver::recv(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::closed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::reserve(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::reserve_owned(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::send(_, NN): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::send_timeout(_, NN, Duration): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::reserve(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::reserve_owned(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::send(_, YN): Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::send_timeout(_, YN, Duration): Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::reserve(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::reserve_owned(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::send(_, YY): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::Sender::send_timeout(_, YY, Duration): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::UnboundedReceiver::recv(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::UnboundedReceiver::recv(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::UnboundedReceiver::recv(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::UnboundedSender::closed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::UnboundedSender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::mpsc::UnboundedSender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::oneshot::Sender::closed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::oneshot::Sender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::oneshot::Sender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::watch::Receiver::changed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::watch::Receiver::changed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::watch::Receiver::changed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::sync::watch::Sender::closed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::watch::Sender::closed(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::sync::watch::Sender::closed(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::task::JoinSet>::join_next(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::task::JoinSet>::shutdown(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::task::JoinSet>::join_next(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::JoinSet>::shutdown(_): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::JoinSet::join_next(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::task::JoinSet::shutdown(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey>::scope(_, Cell, BoxFuture<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey>::scope(_, Cell, BoxFutureSend<()>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey>::scope(_, Cell, BoxFutureSync<()>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey>::scope(_, Rc, BoxFuture<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey>::scope(_, Rc, BoxFutureSend<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey>::scope(_, Rc, BoxFutureSync<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey::scope(_, u32, BoxFuture<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey::scope(_, u32, BoxFutureSend<()>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::LocalKey::scope(_, u32, BoxFutureSync<()>): Send & Sync & !Unpin); -async_assert_fn!(tokio::task::LocalSet::run_until(_, BoxFutureSync<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::task::unconstrained(BoxFuture<()>): !Send & !Sync & Unpin); -async_assert_fn!(tokio::task::unconstrained(BoxFutureSend<()>): Send & !Sync & Unpin); -async_assert_fn!(tokio::task::unconstrained(BoxFutureSync<()>): Send & Sync & Unpin); - -assert_value!(tokio::runtime::Builder: Send & Sync & Unpin); -assert_value!(tokio::runtime::EnterGuard<'_>: !Send & Sync & Unpin); -assert_value!(tokio::runtime::Handle: Send & Sync & Unpin); -assert_value!(tokio::runtime::Runtime: Send & Sync & Unpin); - -assert_value!(tokio::time::Interval: Send & Sync & Unpin); -assert_value!(tokio::time::Instant: Send & Sync & Unpin); -assert_value!(tokio::time::Sleep: Send & Sync & !Unpin); -assert_value!(tokio::time::Timeout>: Send & Sync & !Unpin); -assert_value!(tokio::time::Timeout>: Send & !Sync & !Unpin); -assert_value!(tokio::time::Timeout>: !Send & !Sync & !Unpin); -assert_value!(tokio::time::error::Elapsed: Send & Sync & Unpin); -assert_value!(tokio::time::error::Error: Send & Sync & Unpin); -async_assert_fn!(tokio::time::advance(Duration): Send & Sync & !Unpin); -async_assert_fn!(tokio::time::sleep(Duration): Send & Sync & !Unpin); -async_assert_fn!(tokio::time::sleep_until(Instant): Send & Sync & !Unpin); -async_assert_fn!(tokio::time::timeout(Duration, BoxFutureSync<()>): Send & Sync & !Unpin); -async_assert_fn!(tokio::time::timeout(Duration, BoxFutureSend<()>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::time::timeout(Duration, BoxFuture<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::time::timeout_at(Instant, BoxFutureSync<()>): Send & Sync & !Unpin); -async_assert_fn!(tokio::time::timeout_at(Instant, BoxFutureSend<()>): Send & !Sync & !Unpin); -async_assert_fn!(tokio::time::timeout_at(Instant, BoxFuture<()>): !Send & !Sync & !Unpin); -async_assert_fn!(tokio::time::Interval::tick(_): Send & Sync & !Unpin); - -assert_value!(tokio::io::BufReader: Send & Sync & Unpin); -assert_value!(tokio::io::BufStream: Send & Sync & Unpin); -assert_value!(tokio::io::BufWriter: Send & Sync & Unpin); -assert_value!(tokio::io::DuplexStream: Send & Sync & Unpin); -assert_value!(tokio::io::Empty: Send & Sync & Unpin); -assert_value!(tokio::io::Interest: Send & Sync & Unpin); -assert_value!(tokio::io::Lines: Send & Sync & Unpin); -assert_value!(tokio::io::ReadBuf<'_>: Send & Sync & Unpin); -assert_value!(tokio::io::ReadHalf: Send & Sync & Unpin); -assert_value!(tokio::io::Ready: Send & Sync & Unpin); -assert_value!(tokio::io::Repeat: Send & Sync & Unpin); -assert_value!(tokio::io::Sink: Send & Sync & Unpin); -assert_value!(tokio::io::Split: Send & Sync & Unpin); -assert_value!(tokio::io::Stderr: Send & Sync & Unpin); -assert_value!(tokio::io::Stdin: Send & Sync & Unpin); -assert_value!(tokio::io::Stdout: Send & Sync & Unpin); -assert_value!(tokio::io::Take: Send & Sync & Unpin); -assert_value!(tokio::io::WriteHalf: Send & Sync & Unpin); -async_assert_fn!(tokio::io::copy(&mut TcpStream, &mut TcpStream): Send & Sync & !Unpin); +assert_value!(tokio::sync::AcquireError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::Barrier: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::BarrierWaitResult: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::MappedMutexGuard<'_, NN>: !Send & !Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::MappedMutexGuard<'_, YN>: Send & !Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::MappedMutexGuard<'_, YY>: Send & Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::Mutex: !Send & !Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::Mutex: Send & Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::Mutex: Send & Sync & Unpin & UnwindSafe & !RefUnwindSafe); + +assert_value!(tokio::sync::MutexGuard<'_, NN>: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::MutexGuard<'_, YN>: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::MutexGuard<'_, YY>: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::Notify: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::OnceCell: !Send & !Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OnceCell: Send &!Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OnceCell: Send & Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::SetOnce: !Send & !Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::SetOnce: Send &!Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::SetOnce: Send & Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMutexGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMutexGuard: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMutexGuard: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedMappedMutexGuard: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockMappedWriteGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockMappedWriteGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockMappedWriteGuard: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockReadGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockReadGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockReadGuard: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockWriteGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockWriteGuard: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedRwLockWriteGuard: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::OwnedSemaphorePermit: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLock: !Send & !Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::RwLock: Send &!Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::RwLock: Send & Sync & Unpin & UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::RwLockMappedWriteGuard<'_, NN>: !Send & !Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockMappedWriteGuard<'_, YN>: !Send & !Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockMappedWriteGuard<'_, YY>: Send & Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockReadGuard<'_, NN>: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockReadGuard<'_, YN>: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockReadGuard<'_, YY>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockWriteGuard<'_, NN>: !Send & !Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockWriteGuard<'_, YN>: !Send & !Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::RwLockWriteGuard<'_, YY>: Send & Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::Semaphore: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::SemaphorePermit<'_>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::TryAcquireError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::TryLockError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::Receiver: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::Receiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::Receiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::Sender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::Sender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::Sender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::WeakSender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::WeakSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::broadcast::WeakSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::futures::Notified<'_>: Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::futures::OwnedNotified: Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::mpsc::OwnedPermit: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::OwnedPermit: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::OwnedPermit: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Permit<'_, NN>: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Permit<'_, YN>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Permit<'_, YY>: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Receiver: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Receiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Receiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Sender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Sender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::Sender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::UnboundedReceiver: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::UnboundedReceiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::UnboundedReceiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::UnboundedSender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::UnboundedSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::UnboundedSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::WeakSender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::WeakSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::WeakSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::WeakUnboundedSender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::WeakUnboundedSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::WeakUnboundedSender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::SendError: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::SendError: Send &!Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::SendError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::SendTimeoutError: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::SendTimeoutError: Send &!Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::SendTimeoutError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::TrySendError: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::TrySendError: Send &!Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::mpsc::error::TrySendError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::oneshot::Receiver: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::oneshot::Receiver: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::oneshot::Receiver: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::oneshot::Sender: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::oneshot::Sender: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::oneshot::Sender: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::sync::watch::Receiver: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Receiver: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Receiver: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Ref<'_, NN>: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Ref<'_, YN>: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Ref<'_, YY>: !Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Sender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Sender: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::sync::watch::Sender: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::JoinError: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::task::JoinHandle: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::JoinHandle: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::JoinHandle: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::JoinSet: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::JoinSet: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::JoinSet: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::task::LocalSet: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::task::coop::RestoreOnPending: !Send & !Sync & Unpin & UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Barrier::wait(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Mutex::lock(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Mutex::lock_owned(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Mutex::lock(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Mutex::lock_owned(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Mutex::lock(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Mutex::lock_owned(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Notify::notified(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send + Sync>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send + Sync>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin>>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send + Sync>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send + Sync>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin>>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send + Sync>>): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin + Send>>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_init( _, fn() -> Pin>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send + Sync>>): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin> + Send>>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::OnceCell::get_or_try_init( _, fn() -> Pin>>>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::SetOnce::wait(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::SetOnce::wait(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::SetOnce::wait(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::RwLock::read(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::RwLock::write(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::RwLock::read(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::RwLock::write(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::RwLock::read(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::RwLock::write(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Semaphore::acquire(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Semaphore::acquire_many(_, u32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Semaphore::acquire_many_owned(_, u32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::Semaphore::acquire_owned(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::broadcast::Receiver::recv(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::broadcast::Receiver::recv(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::broadcast::Receiver::recv(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Receiver::recv(_): !Send & !Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Receiver::recv(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Receiver::recv(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::closed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::reserve(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::reserve_owned(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::send(_, NN): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::send_timeout(_, NN, Duration): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::reserve(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::reserve_owned(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::send(_, YN): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::send_timeout(_, YN, Duration): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::reserve(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::reserve_owned(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::send(_, YY): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::Sender::send_timeout(_, YY, Duration): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::UnboundedReceiver::recv(_): !Send & !Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::UnboundedReceiver::recv(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::UnboundedReceiver::recv(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::UnboundedSender::closed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::UnboundedSender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::mpsc::UnboundedSender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::oneshot::Sender::closed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::oneshot::Sender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::oneshot::Sender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::watch::Receiver::changed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::watch::Receiver::changed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::watch::Receiver::changed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::watch::Sender::closed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::watch::Sender::closed(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::sync::watch::Sender::closed(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::JoinSet>::join_next(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::task::JoinSet>::shutdown(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::task::JoinSet>::join_next(_): !Send & !Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::task::JoinSet>::shutdown(_): !Send & !Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::task::JoinSet::join_next(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::task::JoinSet::shutdown(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey>::scope(_, Cell, BoxFuture<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey>::scope(_, Cell, BoxFutureSend<()>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey>::scope(_, Cell, BoxFutureSync<()>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey>::scope(_, Rc, BoxFuture<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey>::scope(_, Rc, BoxFutureSend<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey>::scope(_, Rc, BoxFutureSync<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey::scope(_, u32, BoxFuture<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey::scope(_, u32, BoxFutureSend<()>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalKey::scope(_, u32, BoxFutureSync<()>): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::LocalSet::run_until(_, BoxFutureSync<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::unconstrained(BoxFuture<()>): !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::unconstrained(BoxFutureSend<()>): Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::task::unconstrained(BoxFutureSync<()>): Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + +assert_value!(tokio::runtime::Builder: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::runtime::EnterGuard<'_>: !Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::runtime::Handle: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::runtime::Runtime: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + +assert_value!(tokio::time::Interval: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::time::Instant: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::time::Sleep: Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::time::Timeout>: Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::time::Timeout>: Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::time::Timeout>: !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +assert_value!(tokio::time::error::Elapsed: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::time::error::Error: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::time::advance(Duration): Send & Sync & !Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::time::sleep(Duration): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::sleep_until(Instant): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::timeout(Duration, BoxFutureSync<()>): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::timeout(Duration, BoxFutureSend<()>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::timeout(Duration, BoxFuture<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::timeout_at(Instant, BoxFutureSync<()>): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::timeout_at(Instant, BoxFutureSend<()>): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::timeout_at(Instant, BoxFuture<()>): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::time::Interval::tick(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + +assert_value!(tokio::io::BufReader: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::BufStream: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::BufWriter: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::DuplexStream: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Empty: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Interest: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Lines: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::ReadBuf<'_>: Send & Sync & Unpin & !UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::ReadHalf: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Ready: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Repeat: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Sink: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Split: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Stderr: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Stdin: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Stdout: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::Take: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +assert_value!(tokio::io::WriteHalf: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::copy(&mut TcpStream, &mut TcpStream): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); async_assert_fn!( - tokio::io::copy_bidirectional(&mut TcpStream, &mut TcpStream): Send & Sync & !Unpin + tokio::io::copy_bidirectional(&mut TcpStream, &mut TcpStream): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe ); -async_assert_fn!(tokio::io::copy_buf(&mut tokio::io::BufReader, &mut TcpStream): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::empty(): Send & Sync & Unpin); -async_assert_fn!(tokio::io::repeat(u8): Send & Sync & Unpin); -async_assert_fn!(tokio::io::sink(): Send & Sync & Unpin); -async_assert_fn!(tokio::io::split(TcpStream): Send & Sync & Unpin); -async_assert_fn!(tokio::io::stderr(): Send & Sync & Unpin); -async_assert_fn!(tokio::io::stdin(): Send & Sync & Unpin); -async_assert_fn!(tokio::io::stdout(): Send & Sync & Unpin); -async_assert_fn!(tokio::io::Split>::next_segment(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::Lines>::next_line(_): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncBufReadExt::read_until(&mut BoxAsyncRead, u8, &mut Vec): Send & Sync & !Unpin); +async_assert_fn!(tokio::io::copy_buf(&mut tokio::io::BufReader, &mut TcpStream): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::empty(): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::repeat(u8): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::sink(): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::split(TcpStream): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::stderr(): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::stdin(): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::stdout(): Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::Split>::next_segment(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::Lines>::next_line(_): Send & Sync & !Unpin & !UnwindSafe & RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncBufReadExt::read_until(&mut BoxAsyncRead, u8, &mut Vec): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); async_assert_fn!( - tokio::io::AsyncBufReadExt::read_line(&mut BoxAsyncRead, &mut String): Send & Sync & !Unpin + tokio::io::AsyncBufReadExt::read_line(&mut BoxAsyncRead, &mut String): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); -async_assert_fn!(tokio::io::AsyncBufReadExt::fill_buf(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read(&mut BoxAsyncRead, &mut [u8]): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_buf(&mut BoxAsyncRead, &mut Vec): Send & Sync & !Unpin); +async_assert_fn!(tokio::io::AsyncBufReadExt::fill_buf(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read(&mut BoxAsyncRead, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_buf(&mut BoxAsyncRead, &mut Vec): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); async_assert_fn!( - tokio::io::AsyncReadExt::read_exact(&mut BoxAsyncRead, &mut [u8]): Send & Sync & !Unpin + tokio::io::AsyncReadExt::read_exact(&mut BoxAsyncRead, &mut [u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); -async_assert_fn!(tokio::io::AsyncReadExt::read_u8(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i8(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u16(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i16(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u32(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i32(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u64(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i64(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u128(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i128(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_f32(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_f64(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u16_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i16_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u32_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i32_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u64_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i64_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_u128_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_i128_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_f32_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_f64_le(&mut BoxAsyncRead): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncReadExt::read_to_end(&mut BoxAsyncRead, &mut Vec): Send & Sync & !Unpin); +async_assert_fn!(tokio::io::AsyncReadExt::read_u8(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i8(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u16(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i16(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u32(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i32(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u64(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i64(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u128(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i128(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_f32(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_f64(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u16_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i16_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u32_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i32_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u64_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i64_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_u128_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_i128_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_f32_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_f64_le(&mut BoxAsyncRead): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncReadExt::read_to_end(&mut BoxAsyncRead, &mut Vec): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); async_assert_fn!( - tokio::io::AsyncReadExt::read_to_string(&mut BoxAsyncRead, &mut String): Send & Sync & !Unpin + tokio::io::AsyncReadExt::read_to_string(&mut BoxAsyncRead, &mut String): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); -async_assert_fn!(tokio::io::AsyncSeekExt::seek(&mut BoxAsyncSeek, SeekFrom): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncSeekExt::stream_position(&mut BoxAsyncSeek): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncWriteExt::write(&mut BoxAsyncWrite, &[u8]): Send & Sync & !Unpin); +async_assert_fn!(tokio::io::AsyncSeekExt::seek(&mut BoxAsyncSeek, SeekFrom): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncSeekExt::stream_position(&mut BoxAsyncSeek): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncWriteExt::write(&mut BoxAsyncWrite, &[u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); async_assert_fn!( - tokio::io::AsyncWriteExt::write_vectored(&mut BoxAsyncWrite, _): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_vectored(&mut BoxAsyncWrite, _): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( tokio::io::AsyncWriteExt::write_buf(&mut BoxAsyncWrite, &mut bytes::Bytes): Send & Sync & !Unpin + & !UnwindSafe + & !RefUnwindSafe ); async_assert_fn!( tokio::io::AsyncWriteExt::write_all_buf(&mut BoxAsyncWrite, &mut bytes::Bytes): Send & Sync & !Unpin + & !UnwindSafe + & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_all(&mut BoxAsyncWrite, &[u8]): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_all(&mut BoxAsyncWrite, &[u8]): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); -async_assert_fn!(tokio::io::AsyncWriteExt::write_u8(&mut BoxAsyncWrite, u8): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncWriteExt::write_i8(&mut BoxAsyncWrite, i8): Send & Sync & !Unpin); +async_assert_fn!(tokio::io::AsyncWriteExt::write_u8(&mut BoxAsyncWrite, u8): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncWriteExt::write_i8(&mut BoxAsyncWrite, i8): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u16(&mut BoxAsyncWrite, u16): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u16(&mut BoxAsyncWrite, u16): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i16(&mut BoxAsyncWrite, i16): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i16(&mut BoxAsyncWrite, i16): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u32(&mut BoxAsyncWrite, u32): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u32(&mut BoxAsyncWrite, u32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i32(&mut BoxAsyncWrite, i32): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i32(&mut BoxAsyncWrite, i32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u64(&mut BoxAsyncWrite, u64): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u64(&mut BoxAsyncWrite, u64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i64(&mut BoxAsyncWrite, i64): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i64(&mut BoxAsyncWrite, i64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u128(&mut BoxAsyncWrite, u128): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u128(&mut BoxAsyncWrite, u128): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i128(&mut BoxAsyncWrite, i128): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i128(&mut BoxAsyncWrite, i128): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_f32(&mut BoxAsyncWrite, f32): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_f32(&mut BoxAsyncWrite, f32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_f64(&mut BoxAsyncWrite, f64): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_f64(&mut BoxAsyncWrite, f64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u16_le(&mut BoxAsyncWrite, u16): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u16_le(&mut BoxAsyncWrite, u16): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i16_le(&mut BoxAsyncWrite, i16): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i16_le(&mut BoxAsyncWrite, i16): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u32_le(&mut BoxAsyncWrite, u32): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u32_le(&mut BoxAsyncWrite, u32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i32_le(&mut BoxAsyncWrite, i32): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i32_le(&mut BoxAsyncWrite, i32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u64_le(&mut BoxAsyncWrite, u64): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u64_le(&mut BoxAsyncWrite, u64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i64_le(&mut BoxAsyncWrite, i64): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i64_le(&mut BoxAsyncWrite, i64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_u128_le(&mut BoxAsyncWrite, u128): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_u128_le(&mut BoxAsyncWrite, u128): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_i128_le(&mut BoxAsyncWrite, i128): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_i128_le(&mut BoxAsyncWrite, i128): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_f32_le(&mut BoxAsyncWrite, f32): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_f32_le(&mut BoxAsyncWrite, f32): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); async_assert_fn!( - tokio::io::AsyncWriteExt::write_f64_le(&mut BoxAsyncWrite, f64): Send & Sync & !Unpin + tokio::io::AsyncWriteExt::write_f64_le(&mut BoxAsyncWrite, f64): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe ); -async_assert_fn!(tokio::io::AsyncWriteExt::flush(&mut BoxAsyncWrite): Send & Sync & !Unpin); -async_assert_fn!(tokio::io::AsyncWriteExt::shutdown(&mut BoxAsyncWrite): Send & Sync & !Unpin); +async_assert_fn!(tokio::io::AsyncWriteExt::flush(&mut BoxAsyncWrite): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); +async_assert_fn!(tokio::io::AsyncWriteExt::shutdown(&mut BoxAsyncWrite): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); #[cfg(unix)] mod unix_asyncfd { @@ -745,34 +801,34 @@ mod unix_asyncfd { } } - assert_value!(AsyncFd>: Send & Sync & Unpin); - assert_value!(AsyncFd>: Send & !Sync & Unpin); - assert_value!(AsyncFd>: !Send & !Sync & Unpin); - assert_value!(AsyncFdReadyGuard<'_, ImplsFd>: Send & Sync & Unpin); - assert_value!(AsyncFdReadyGuard<'_, ImplsFd>: !Send & !Sync & Unpin); - assert_value!(AsyncFdReadyGuard<'_, ImplsFd>: !Send & !Sync & Unpin); - assert_value!(AsyncFdReadyMutGuard<'_, ImplsFd>: Send & Sync & Unpin); - assert_value!(AsyncFdReadyMutGuard<'_, ImplsFd>: Send & !Sync & Unpin); - assert_value!(AsyncFdReadyMutGuard<'_, ImplsFd>: !Send & !Sync & Unpin); - assert_value!(TryIoError: Send & Sync & Unpin); - async_assert_fn!(AsyncFd>::readable(_): Send & Sync & !Unpin); - async_assert_fn!(AsyncFd>::readable_mut(_): Send & Sync & !Unpin); - async_assert_fn!(AsyncFd>::writable(_): Send & Sync & !Unpin); - async_assert_fn!(AsyncFd>::writable_mut(_): Send & Sync & !Unpin); - async_assert_fn!(AsyncFd>::readable(_): !Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::readable_mut(_): Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::writable(_): !Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::writable_mut(_): Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::readable(_): !Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::readable_mut(_): !Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::writable(_): !Send & !Sync & !Unpin); - async_assert_fn!(AsyncFd>::writable_mut(_): !Send & !Sync & !Unpin); + assert_value!(AsyncFd>: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFd>: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFd>: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFdReadyGuard<'_, ImplsFd>: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFdReadyGuard<'_, ImplsFd>: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFdReadyGuard<'_, ImplsFd>: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFdReadyMutGuard<'_, ImplsFd>: Send & Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFdReadyMutGuard<'_, ImplsFd>: Send &!Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(AsyncFdReadyMutGuard<'_, ImplsFd>: !Send & !Sync & Unpin & !UnwindSafe & !RefUnwindSafe); + assert_value!(TryIoError: Send & Sync & Unpin & UnwindSafe & RefUnwindSafe); + async_assert_fn!(AsyncFd>::readable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::readable_mut(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::writable(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::writable_mut(_): Send & Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::readable(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::readable_mut(_): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::writable(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::writable_mut(_): Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::readable(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::readable_mut(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::writable(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); + async_assert_fn!(AsyncFd>::writable_mut(_): !Send & !Sync & !Unpin & !UnwindSafe & !RefUnwindSafe); } #[cfg(tokio_unstable)] mod unstable { use super::*; - assert_value!(tokio::runtime::LocalRuntime: !Send & !Sync & Unpin); - assert_value!(tokio::runtime::LocalOptions: !Send & !Sync & Unpin); + assert_value!(tokio::runtime::LocalRuntime: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); + assert_value!(tokio::runtime::LocalOptions: !Send & !Sync & Unpin & UnwindSafe & RefUnwindSafe); }