about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-09-24 12:17:53 +0000
committerbors <bors@rust-lang.org>2022-09-24 12:17:53 +0000
commitcdb76db493fa5e0382b18ecd9f8da7ef00ceb951 (patch)
tree8f3d7c7fe36a75e3ac1ca470b81ea5505d2e1be7
parentbb5a01617589b5e3ece5a36435fc285bfd13c9a4 (diff)
parent29efe8c78920e9cd74bb8f7dacff7eaa5370fcf6 (diff)
downloadrust-cdb76db493fa5e0382b18ecd9f8da7ef00ceb951.tar.gz
rust-cdb76db493fa5e0382b18ecd9f8da7ef00ceb951.zip
Auto merge of #102167 - thomcc:exclusive-inline, r=scottmcm
Add `#[inline]` to trivial functions on `core::sync::Exclusive`

When optimizing for size things like these sometimes don't inlined even though they're generic. This is bad because they're no-ops.

Only dodgy one is poll I guess since it forwards to the inner poll, but it's not like we're doing `#[inline(always)]` here.
-rw-r--r--library/core/src/sync/exclusive.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/library/core/src/sync/exclusive.rs b/library/core/src/sync/exclusive.rs
index a7519ab5ab6..c65c275000c 100644
--- a/library/core/src/sync/exclusive.rs
+++ b/library/core/src/sync/exclusive.rs
@@ -100,6 +100,7 @@ impl<T: Sized> Exclusive<T> {
     /// Wrap a value in an `Exclusive`
     #[unstable(feature = "exclusive_wrapper", issue = "98407")]
     #[must_use]
+    #[inline]
     pub const fn new(t: T) -> Self {
         Self { inner: t }
     }
@@ -107,6 +108,7 @@ impl<T: Sized> Exclusive<T> {
     /// Unwrap the value contained in the `Exclusive`
     #[unstable(feature = "exclusive_wrapper", issue = "98407")]
     #[must_use]
+    #[inline]
     pub const fn into_inner(self) -> T {
         self.inner
     }
@@ -116,6 +118,7 @@ impl<T: ?Sized> Exclusive<T> {
     /// Get exclusive access to the underlying value.
     #[unstable(feature = "exclusive_wrapper", issue = "98407")]
     #[must_use]
+    #[inline]
     pub const fn get_mut(&mut self) -> &mut T {
         &mut self.inner
     }
@@ -128,6 +131,7 @@ impl<T: ?Sized> Exclusive<T> {
     /// produce _pinned_ access to the underlying value.
     #[unstable(feature = "exclusive_wrapper", issue = "98407")]
     #[must_use]
+    #[inline]
     pub const fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T> {
         // SAFETY: `Exclusive` can only produce `&mut T` if itself is unpinned
         // `Pin::map_unchecked_mut` is not const, so we do this conversion manually
@@ -139,6 +143,7 @@ impl<T: ?Sized> Exclusive<T> {
     /// building an `Exclusive` with [`Exclusive::new`].
     #[unstable(feature = "exclusive_wrapper", issue = "98407")]
     #[must_use]
+    #[inline]
     pub const fn from_mut(r: &'_ mut T) -> &'_ mut Exclusive<T> {
         // SAFETY: repr is ≥ C, so refs have the same layout; and `Exclusive` properties are `&mut`-agnostic
         unsafe { &mut *(r as *mut T as *mut Exclusive<T>) }
@@ -149,6 +154,7 @@ impl<T: ?Sized> Exclusive<T> {
     /// building an `Exclusive` with [`Exclusive::new`].
     #[unstable(feature = "exclusive_wrapper", issue = "98407")]
     #[must_use]
+    #[inline]
     pub const fn from_pin_mut(r: Pin<&'_ mut T>) -> Pin<&'_ mut Exclusive<T>> {
         // SAFETY: `Exclusive` can only produce `&mut T` if itself is unpinned
         // `Pin::map_unchecked_mut` is not const, so we do this conversion manually
@@ -158,6 +164,7 @@ impl<T: ?Sized> Exclusive<T> {
 
 #[unstable(feature = "exclusive_wrapper", issue = "98407")]
 impl<T> From<T> for Exclusive<T> {
+    #[inline]
     fn from(t: T) -> Self {
         Self::new(t)
     }
@@ -166,7 +173,7 @@ impl<T> From<T> for Exclusive<T> {
 #[unstable(feature = "exclusive_wrapper", issue = "98407")]
 impl<T: Future + ?Sized> Future for Exclusive<T> {
     type Output = T::Output;
-
+    #[inline]
     fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
         self.get_pin_mut().poll(cx)
     }