Skip to content

Commit 0d64b01

Browse files
Slightly improve panic messages when range indices are out of bounds
1 parent ce33804 commit 0d64b01

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

src/libcore/slice/mod.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -2974,8 +2974,15 @@ where
29742974
#[inline(never)]
29752975
#[cold]
29762976
#[track_caller]
2977-
fn slice_index_len_fail(index: usize, len: usize) -> ! {
2978-
panic!("index {} out of range for slice of length {}", index, len);
2977+
fn slice_start_index_len_fail(index: usize, len: usize) -> ! {
2978+
panic!("range start index {} out of range for slice of length {}", index, len);
2979+
}
2980+
2981+
#[inline(never)]
2982+
#[cold]
2983+
#[track_caller]
2984+
fn slice_end_index_len_fail(index: usize, len: usize) -> ! {
2985+
panic!("range end index {} out of range for slice of length {}", index, len);
29792986
}
29802987

29812988
#[inline(never)]
@@ -3160,7 +3167,7 @@ unsafe impl<T> SliceIndex<[T]> for ops::Range<usize> {
31603167
if self.start > self.end {
31613168
slice_index_order_fail(self.start, self.end);
31623169
} else if self.end > slice.len() {
3163-
slice_index_len_fail(self.end, slice.len());
3170+
slice_end_index_len_fail(self.end, slice.len());
31643171
}
31653172
unsafe { &*self.get_unchecked(slice) }
31663173
}
@@ -3170,7 +3177,7 @@ unsafe impl<T> SliceIndex<[T]> for ops::Range<usize> {
31703177
if self.start > self.end {
31713178
slice_index_order_fail(self.start, self.end);
31723179
} else if self.end > slice.len() {
3173-
slice_index_len_fail(self.end, slice.len());
3180+
slice_end_index_len_fail(self.end, slice.len());
31743181
}
31753182
unsafe { &mut *self.get_unchecked_mut(slice) }
31763183
}
@@ -3242,15 +3249,15 @@ unsafe impl<T> SliceIndex<[T]> for ops::RangeFrom<usize> {
32423249
#[inline]
32433250
fn index(self, slice: &[T]) -> &[T] {
32443251
if self.start > slice.len() {
3245-
slice_index_len_fail(self.start, slice.len());
3252+
slice_start_index_len_fail(self.start, slice.len());
32463253
}
32473254
unsafe { &*self.get_unchecked(slice) }
32483255
}
32493256

32503257
#[inline]
32513258
fn index_mut(self, slice: &mut [T]) -> &mut [T] {
32523259
if self.start > slice.len() {
3253-
slice_index_len_fail(self.start, slice.len());
3260+
slice_start_index_len_fail(self.start, slice.len());
32543261
}
32553262
unsafe { &mut *self.get_unchecked_mut(slice) }
32563263
}

src/test/codegen/issue-69101-bounds-check.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// CHECK-LABEL: @already_sliced_no_bounds_check
1313
#[no_mangle]
1414
pub fn already_sliced_no_bounds_check(a: &[u8], b: &[u8], c: &mut [u8]) {
15-
// CHECK: slice_index_len_fail
15+
// CHECK: slice_end_index_len_fail
1616
// CHECK-NOT: panic_bounds_check
1717
let _ = (&a[..2048], &b[..2048], &mut c[..2048]);
1818
for i in 0..1024 {
@@ -23,7 +23,7 @@ pub fn already_sliced_no_bounds_check(a: &[u8], b: &[u8], c: &mut [u8]) {
2323
// CHECK-LABEL: @already_sliced_no_bounds_check_exact
2424
#[no_mangle]
2525
pub fn already_sliced_no_bounds_check_exact(a: &[u8], b: &[u8], c: &mut [u8]) {
26-
// CHECK: slice_index_len_fail
26+
// CHECK: slice_end_index_len_fail
2727
// CHECK-NOT: panic_bounds_check
2828
let _ = (&a[..1024], &b[..1024], &mut c[..1024]);
2929
for i in 0..1024 {
@@ -35,7 +35,7 @@ pub fn already_sliced_no_bounds_check_exact(a: &[u8], b: &[u8], c: &mut [u8]) {
3535
// CHECK-LABEL: @already_sliced_bounds_check
3636
#[no_mangle]
3737
pub fn already_sliced_bounds_check(a: &[u8], b: &[u8], c: &mut [u8]) {
38-
// CHECK: slice_index_len_fail
38+
// CHECK: slice_end_index_len_fail
3939
// CHECK: panic_bounds_check
4040
let _ = (&a[..1023], &b[..2048], &mut c[..2048]);
4141
for i in 0..1024 {

0 commit comments

Comments
 (0)