Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#[inline(always)] on forwarding slice/vec methods #85202

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions library/alloc/src/vec/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -775,7 +775,7 @@ impl<T, A: Allocator> Vec<T, A> {
/// let vec: Vec<i32> = Vec::with_capacity(10);
/// assert_eq!(vec.capacity(), 10);
/// ```
#[inline]
#[inline(always)]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn capacity(&self) -> usize {
self.buf.capacity()
Expand Down Expand Up @@ -1078,7 +1078,7 @@ impl<T, A: Allocator> Vec<T, A> {
/// let buffer = vec![1, 2, 3, 5, 8];
/// io::sink().write(buffer.as_slice()).unwrap();
/// ```
#[inline]
#[inline(always)]
#[stable(feature = "vec_as_slice", since = "1.7.0")]
pub fn as_slice(&self) -> &[T] {
self
Expand All @@ -1095,7 +1095,7 @@ impl<T, A: Allocator> Vec<T, A> {
/// let mut buffer = vec![0; 3];
/// io::repeat(0b101).read_exact(buffer.as_mut_slice()).unwrap();
/// ```
#[inline]
#[inline(always)]
#[stable(feature = "vec_as_slice", since = "1.7.0")]
pub fn as_mut_slice(&mut self) -> &mut [T] {
self
Expand Down Expand Up @@ -1820,7 +1820,7 @@ impl<T, A: Allocator> Vec<T, A> {
/// assert_eq!(a.len(), 3);
/// ```
#[doc(alias = "length")]
#[inline]
#[inline(always)]
#[stable(feature = "rust1", since = "1.0.0")]
pub fn len(&self) -> usize {
self.len
Expand Down Expand Up @@ -2422,7 +2422,7 @@ impl<T: Hash, A: Allocator> Hash for Vec<T, A> {
impl<T, I: SliceIndex<[T]>, A: Allocator> Index<I> for Vec<T, A> {
type Output = I::Output;

#[inline]
#[inline(always)]
fn index(&self, index: I) -> &Self::Output {
Index::index(&**self, index)
}
Expand All @@ -2434,7 +2434,7 @@ impl<T, I: SliceIndex<[T]>, A: Allocator> Index<I> for Vec<T, A> {
label = "vector indices are of type `usize` or ranges of `usize`"
)]
impl<T, I: SliceIndex<[T]>, A: Allocator> IndexMut<I> for Vec<T, A> {
#[inline]
#[inline(always)]
fn index_mut(&mut self, index: I) -> &mut Self::Output {
IndexMut::index_mut(&mut **self, index)
}
Expand Down Expand Up @@ -2496,6 +2496,7 @@ impl<'a, T, A: Allocator> IntoIterator for &'a Vec<T, A> {
type Item = &'a T;
type IntoIter = slice::Iter<'a, T>;

#[inline(always)]
fn into_iter(self) -> slice::Iter<'a, T> {
self.iter()
}
Expand All @@ -2506,6 +2507,7 @@ impl<'a, T, A: Allocator> IntoIterator for &'a mut Vec<T, A> {
type Item = &'a mut T;
type IntoIter = slice::IterMut<'a, T>;

#[inline(always)]
fn into_iter(self) -> slice::IterMut<'a, T> {
self.iter_mut()
}
Expand Down
28 changes: 15 additions & 13 deletions library/core/src/iter/range.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ pub unsafe trait Step: Clone + PartialOrd + Sized {
///
/// * `Step::forward_unchecked(a, n)` is equivalent to `Step::forward(a, n)`
#[unstable(feature = "step_trait_ext", reason = "recently added", issue = "42168")]
#[inline(always)]
unsafe fn forward_unchecked(start: Self, count: usize) -> Self {
Step::forward(start, count)
}
Expand Down Expand Up @@ -179,6 +180,7 @@ pub unsafe trait Step: Clone + PartialOrd + Sized {
///
/// * `Step::backward_unchecked(a, n)` is equivalent to `Step::backward(a, n)`
#[unstable(feature = "step_trait_ext", reason = "recently added", issue = "42168")]
#[inline(always)]
unsafe fn backward_unchecked(start: Self, count: usize) -> Self {
Step::backward(start, count)
}
Expand All @@ -187,13 +189,13 @@ pub unsafe trait Step: Clone + PartialOrd + Sized {
// These are still macro-generated because the integer literals resolve to different types.
macro_rules! step_identical_methods {
() => {
#[inline]
#[inline(always)]
unsafe fn forward_unchecked(start: Self, n: usize) -> Self {
// SAFETY: the caller has to guarantee that `start + n` doesn't overflow.
unsafe { start.unchecked_add(n as Self) }
}

#[inline]
#[inline(always)]
unsafe fn backward_unchecked(start: Self, n: usize) -> Self {
// SAFETY: the caller has to guarantee that `start - n` doesn't overflow.
unsafe { start.unchecked_sub(n as Self) }
Expand Down Expand Up @@ -345,12 +347,12 @@ macro_rules! step_integer_impls {
}
}

#[inline]
#[inline(always)]
fn forward_checked(start: Self, n: usize) -> Option<Self> {
start.checked_add(n as Self)
}

#[inline]
#[inline(always)]
fn backward_checked(start: Self, n: usize) -> Option<Self> {
start.checked_sub(n as Self)
}
Expand All @@ -375,12 +377,12 @@ macro_rules! step_integer_impls {
}
}

#[inline]
#[inline(always)]
fn forward_checked(start: Self, n: usize) -> Option<Self> {
start.checked_add(n as Self)
}

#[inline]
#[inline(always)]
fn backward_checked(start: Self, n: usize) -> Option<Self> {
start.checked_sub(n as Self)
}
Expand Down Expand Up @@ -551,17 +553,17 @@ impl<A: Step> Iterator for ops::Range<A> {
None
}

#[inline]
#[inline(always)]
fn last(mut self) -> Option<A> {
self.next_back()
}

#[inline]
#[inline(always)]
fn min(mut self) -> Option<A> {
self.next()
}

#[inline]
#[inline(always)]
fn max(mut self) -> Option<A> {
self.next_back()
}
Expand Down Expand Up @@ -671,7 +673,7 @@ impl<A: Step> Iterator for ops::RangeFrom<A> {
Some(mem::replace(&mut self.start, n))
}

#[inline]
#[inline(always)]
fn size_hint(&self) -> (usize, Option<usize>) {
(usize::MAX, None)
}
Expand Down Expand Up @@ -793,17 +795,17 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
self.try_fold(init, ok(f)).unwrap()
}

#[inline]
#[inline(always)]
fn last(mut self) -> Option<A> {
self.next_back()
}

#[inline]
#[inline(always)]
fn min(mut self) -> Option<A> {
self.next()
}

#[inline]
#[inline(always)]
fn max(mut self) -> Option<A> {
self.next_back()
}
Expand Down
50 changes: 25 additions & 25 deletions library/core/src/ptr/mut_ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ impl<T: ?Sized> *mut T {
/// Casts to a pointer of another type.
#[stable(feature = "ptr_cast", since = "1.38.0")]
#[rustc_const_stable(feature = "const_ptr_cast", since = "1.38.0")]
#[inline]
#[inline(always)]
pub const fn cast<U>(self) -> *mut U {
self as _
}
Expand Down Expand Up @@ -551,7 +551,7 @@ impl<T: ?Sized> *mut T {
/// ```
#[stable(feature = "ptr_offset_from", since = "1.47.0")]
#[rustc_const_unstable(feature = "const_ptr_offset_from", issue = "41079")]
#[inline]
#[inline(always)]
pub const unsafe fn offset_from(self, origin: *const T) -> isize
where
T: Sized,
Expand Down Expand Up @@ -859,7 +859,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::read`]: crate::ptr::read()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[rustc_const_unstable(feature = "const_ptr_read", issue = "80377")]
#[inline]
#[inline(always)]
pub const unsafe fn read(self) -> T
where
T: Sized,
Expand All @@ -879,7 +879,7 @@ impl<T: ?Sized> *mut T {
///
/// [`ptr::read_volatile`]: crate::ptr::read_volatile()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub unsafe fn read_volatile(self) -> T
where
T: Sized,
Expand All @@ -898,7 +898,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::read_unaligned`]: crate::ptr::read_unaligned()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[rustc_const_unstable(feature = "const_ptr_read", issue = "80377")]
#[inline]
#[inline(always)]
pub const unsafe fn read_unaligned(self) -> T
where
T: Sized,
Expand All @@ -917,7 +917,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::copy`]: crate::ptr::copy()
#[rustc_const_unstable(feature = "const_intrinsic_copy", issue = "80697")]
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub const unsafe fn copy_to(self, dest: *mut T, count: usize)
where
T: Sized,
Expand All @@ -936,7 +936,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::copy_nonoverlapping`]: crate::ptr::copy_nonoverlapping()
#[rustc_const_unstable(feature = "const_intrinsic_copy", issue = "80697")]
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub const unsafe fn copy_to_nonoverlapping(self, dest: *mut T, count: usize)
where
T: Sized,
Expand All @@ -955,7 +955,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::copy`]: crate::ptr::copy()
#[rustc_const_unstable(feature = "const_intrinsic_copy", issue = "80697")]
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub const unsafe fn copy_from(self, src: *const T, count: usize)
where
T: Sized,
Expand All @@ -974,7 +974,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::copy_nonoverlapping`]: crate::ptr::copy_nonoverlapping()
#[rustc_const_unstable(feature = "const_intrinsic_copy", issue = "80697")]
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub const unsafe fn copy_from_nonoverlapping(self, src: *const T, count: usize)
where
T: Sized,
Expand All @@ -989,7 +989,7 @@ impl<T: ?Sized> *mut T {
///
/// [`ptr::drop_in_place`]: crate::ptr::drop_in_place()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub unsafe fn drop_in_place(self) {
// SAFETY: the caller must uphold the safety contract for `drop_in_place`.
unsafe { drop_in_place(self) }
Expand All @@ -1003,7 +1003,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::write`]: crate::ptr::write()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[rustc_const_unstable(feature = "const_ptr_write", issue = "none")]
#[inline]
#[inline(always)]
pub const unsafe fn write(self, val: T)
where
T: Sized,
Expand All @@ -1019,7 +1019,7 @@ impl<T: ?Sized> *mut T {
///
/// [`ptr::write_bytes`]: crate::ptr::write_bytes()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub unsafe fn write_bytes(self, val: u8, count: usize)
where
T: Sized,
Expand All @@ -1039,7 +1039,7 @@ impl<T: ?Sized> *mut T {
///
/// [`ptr::write_volatile`]: crate::ptr::write_volatile()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub unsafe fn write_volatile(self, val: T)
where
T: Sized,
Expand All @@ -1058,7 +1058,7 @@ impl<T: ?Sized> *mut T {
/// [`ptr::write_unaligned`]: crate::ptr::write_unaligned()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[rustc_const_unstable(feature = "const_ptr_write", issue = "none")]
#[inline]
#[inline(always)]
pub const unsafe fn write_unaligned(self, val: T)
where
T: Sized,
Expand All @@ -1074,7 +1074,7 @@ impl<T: ?Sized> *mut T {
///
/// [`ptr::replace`]: crate::ptr::replace()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub unsafe fn replace(self, src: T) -> T
where
T: Sized,
Expand All @@ -1091,7 +1091,7 @@ impl<T: ?Sized> *mut T {
///
/// [`ptr::swap`]: crate::ptr::swap()
#[stable(feature = "pointer_methods", since = "1.26.0")]
#[inline]
#[inline(always)]
pub unsafe fn swap(self, with: *mut T)
where
T: Sized,
Expand Down Expand Up @@ -1170,7 +1170,7 @@ impl<T> *mut [T] {
/// let slice: *mut [i8] = ptr::slice_from_raw_parts_mut(ptr::null_mut(), 3);
/// assert_eq!(slice.len(), 3);
/// ```
#[inline]
#[inline(always)]
#[unstable(feature = "slice_ptr_len", issue = "71146")]
#[rustc_const_unstable(feature = "const_slice_ptr_len", issue = "71146")]
pub const fn len(self) -> usize {
Expand All @@ -1190,7 +1190,7 @@ impl<T> *mut [T] {
/// let slice: *mut [i8] = ptr::slice_from_raw_parts_mut(ptr::null_mut(), 3);
/// assert_eq!(slice.as_mut_ptr(), 0 as *mut i8);
/// ```
#[inline]
#[inline(always)]
#[unstable(feature = "slice_ptr_get", issue = "74265")]
#[rustc_const_unstable(feature = "slice_ptr_get", issue = "74265")]
pub const fn as_mut_ptr(self) -> *mut T {
Expand All @@ -1217,7 +1217,7 @@ impl<T> *mut [T] {
/// }
/// ```
#[unstable(feature = "slice_ptr_get", issue = "74265")]
#[inline]
#[inline(always)]
pub unsafe fn get_unchecked_mut<I>(self, index: I) -> *mut I::Output
where
I: SliceIndex<[T]>,
Expand Down Expand Up @@ -1332,7 +1332,7 @@ impl<T> *mut [T] {
// Equality for pointers
#[stable(feature = "rust1", since = "1.0.0")]
impl<T: ?Sized> PartialEq for *mut T {
#[inline]
#[inline(always)]
fn eq(&self, other: &*mut T) -> bool {
*self == *other
}
Expand All @@ -1357,27 +1357,27 @@ impl<T: ?Sized> Ord for *mut T {

#[stable(feature = "rust1", since = "1.0.0")]
impl<T: ?Sized> PartialOrd for *mut T {
#[inline]
#[inline(always)]
fn partial_cmp(&self, other: &*mut T) -> Option<Ordering> {
Some(self.cmp(other))
}

#[inline]
#[inline(always)]
fn lt(&self, other: &*mut T) -> bool {
*self < *other
}

#[inline]
#[inline(always)]
fn le(&self, other: &*mut T) -> bool {
*self <= *other
}

#[inline]
#[inline(always)]
fn gt(&self, other: &*mut T) -> bool {
*self > *other
}

#[inline]
#[inline(always)]
fn ge(&self, other: &*mut T) -> bool {
*self >= *other
}
Expand Down
Loading