diff --git a/library/core/src/slice/index.rs b/library/core/src/slice/index.rs index de220e7e38a4b..a9806060d3d81 100644 --- a/library/core/src/slice/index.rs +++ b/library/core/src/slice/index.rs @@ -564,7 +564,10 @@ unsafe impl const SliceIndex<[T]> for ops::RangeFrom { slice_index_fail(self.start, slice.len(), slice.len()) } // SAFETY: `self` is checked to be valid and in bounds above. - unsafe { &*self.get_unchecked(slice) } + unsafe { + let new_len = crate::intrinsics::unchecked_sub(slice.len(), self.start); + &*get_offset_len_noubcheck(slice, self.start, new_len) + } } #[inline] @@ -573,7 +576,10 @@ unsafe impl const SliceIndex<[T]> for ops::RangeFrom { slice_index_fail(self.start, slice.len(), slice.len()) } // SAFETY: `self` is checked to be valid and in bounds above. - unsafe { &mut *self.get_unchecked_mut(slice) } + unsafe { + let new_len = crate::intrinsics::unchecked_sub(slice.len(), self.start); + &mut *get_offset_len_mut_noubcheck(slice, self.start, new_len) + } } }