Skip to content

Commit dab1c57

Browse files
committed
Added codegen test for elidings bounds check when indexes are manually checked
Closes #55147
1 parent e7738af commit dab1c57

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

tests/codegen/slice-indexing.rs

+37
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,40 @@ pub unsafe fn str_get_unchecked_mut_by_range(x: &mut str, r: Range<usize>) -> &m
6060
// CHECK: sub nuw i64
6161
x.get_unchecked_mut(r)
6262
}
63+
64+
// CHECK-LABEL: @slice_repeated_indexing(
65+
#[no_mangle]
66+
pub fn slice_repeated_indexing(dst: &mut [u8], offset: usize) {
67+
let mut i = offset;
68+
// CHECK: panic_bounds_check
69+
dst[i] = 1;
70+
i += 1;
71+
// CHECK: panic_bounds_check
72+
dst[i] = 2;
73+
i += 1;
74+
// CHECK: panic_bounds_check
75+
dst[i] = 3;
76+
i += 1;
77+
// CHECK: panic_bounds_check
78+
dst[i] = 4;
79+
}
80+
81+
// CHECK-LABEL: @slice_repeated_indexing_coalesced(
82+
#[no_mangle]
83+
pub fn slice_repeated_indexing_coalesced(dst: &mut [u8], offset: usize) {
84+
let mut i = offset;
85+
if i.checked_add(4).unwrap() <= dst.len() {
86+
// CHECK-NOT: panic_bounds_check
87+
dst[i] = 1;
88+
i += 1;
89+
// CHECK-NOT: panic_bounds_check
90+
dst[i] = 2;
91+
i += 1;
92+
// CHECK-NOT: panic_bounds_check
93+
dst[i] = 3;
94+
i += 1;
95+
// CHECK-NOT: panic_bounds_check
96+
dst[i] = 4;
97+
}
98+
// CHECK: ret
99+
}

0 commit comments

Comments
 (0)