diff options
| author | bors <bors@rust-lang.org> | 2024-02-11 05:13:02 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-02-11 05:13:02 +0000 |
| commit | a40a100e4bc5db830169f59cc301a1105dd366d8 (patch) | |
| tree | 3dfb18335ff56656383b97106112e199617842e6 /library/core/src | |
| parent | 5a3a2d5a5ea80b04df3fd3406f2bd924763d78a6 (diff) | |
| parent | 48bb2bf4e6bfc5c9ffc9cb3f34a9163c05ce2cb2 (diff) | |
| download | rust-a40a100e4bc5db830169f59cc301a1105dd366d8.tar.gz rust-a40a100e4bc5db830169f59cc301a1105dd366d8.zip | |
Auto merge of #3294 - rust-lang:rustup-2024-02-11, r=saethlin
Automatic Rustup
Diffstat (limited to 'library/core/src')
| -rw-r--r-- | library/core/src/ops/async_function.rs | 51 | ||||
| -rw-r--r-- | library/core/src/sync/atomic.rs | 11 |
2 files changed, 47 insertions, 15 deletions
diff --git a/library/core/src/ops/async_function.rs b/library/core/src/ops/async_function.rs index c5a8303a75c..d6b06ffb7fc 100644 --- a/library/core/src/ops/async_function.rs +++ b/library/core/src/ops/async_function.rs @@ -65,44 +65,67 @@ pub trait AsyncFnOnce<Args: Tuple> { mod impls { use super::{AsyncFn, AsyncFnMut, AsyncFnOnce}; - use crate::future::Future; use crate::marker::Tuple; #[unstable(feature = "async_fn_traits", issue = "none")] - impl<F: Fn<A>, A: Tuple> AsyncFn<A> for F + impl<A: Tuple, F: ?Sized> AsyncFn<A> for &F where - <F as FnOnce<A>>::Output: Future, + F: AsyncFn<A>, { - type CallFuture<'a> = <F as FnOnce<A>>::Output where Self: 'a; + type CallFuture<'a> = F::CallFuture<'a> where Self: 'a; extern "rust-call" fn async_call(&self, args: A) -> Self::CallFuture<'_> { - self.call(args) + F::async_call(*self, args) } } #[unstable(feature = "async_fn_traits", issue = "none")] - impl<F: FnMut<A>, A: Tuple> AsyncFnMut<A> for F + impl<A: Tuple, F: ?Sized> AsyncFnMut<A> for &F where - <F as FnOnce<A>>::Output: Future, + F: AsyncFn<A>, { - type CallMutFuture<'a> = <F as FnOnce<A>>::Output where Self: 'a; + type CallMutFuture<'a> = F::CallFuture<'a> where Self: 'a; extern "rust-call" fn async_call_mut(&mut self, args: A) -> Self::CallMutFuture<'_> { - self.call_mut(args) + F::async_call(*self, args) } } #[unstable(feature = "async_fn_traits", issue = "none")] - impl<F: FnOnce<A>, A: Tuple> AsyncFnOnce<A> for F + impl<'a, A: Tuple, F: ?Sized> AsyncFnOnce<A> for &'a F where - <F as FnOnce<A>>::Output: Future, + F: AsyncFn<A>, { - type CallOnceFuture = <F as FnOnce<A>>::Output; + type Output = F::Output; + type CallOnceFuture = F::CallFuture<'a>; - type Output = <<F as FnOnce<A>>::Output as Future>::Output; + extern "rust-call" fn async_call_once(self, args: A) -> Self::CallOnceFuture { + F::async_call(self, args) + } + } + + #[unstable(feature = "async_fn_traits", issue = "none")] + impl<A: Tuple, F: ?Sized> AsyncFnMut<A> for &mut F + where + F: AsyncFnMut<A>, + { + type CallMutFuture<'a> = F::CallMutFuture<'a> where Self: 'a; + + extern "rust-call" fn async_call_mut(&mut self, args: A) -> Self::CallMutFuture<'_> { + F::async_call_mut(*self, args) + } + } + + #[unstable(feature = "async_fn_traits", issue = "none")] + impl<'a, A: Tuple, F: ?Sized> AsyncFnOnce<A> for &'a mut F + where + F: AsyncFnMut<A>, + { + type Output = F::Output; + type CallOnceFuture = F::CallMutFuture<'a>; extern "rust-call" fn async_call_once(self, args: A) -> Self::CallOnceFuture { - self.call_once(args) + F::async_call_mut(self, args) } } } diff --git a/library/core/src/sync/atomic.rs b/library/core/src/sync/atomic.rs index ad8c70c6a3c..d9654973b84 100644 --- a/library/core/src/sync/atomic.rs +++ b/library/core/src/sync/atomic.rs @@ -2119,7 +2119,16 @@ macro_rules! atomic_int { /// This type has the same in-memory representation as the underlying /// integer type, [` #[doc = $s_int_type] - /// `]. For more about the differences between atomic types and + /// `]. + #[doc = if_not_8_bit! { + $int_type, + concat!( + "However, the alignment of this type is always equal to its ", + "size, even on targets where [`", $s_int_type, "`] has a ", + "lesser alignment." + ) + }] + /// For more about the differences between atomic types and /// non-atomic types as well as information about the portability of /// this type, please see the [module-level documentation]. /// |
