diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-12-29 21:18:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-29 21:18:08 +0100 |
| commit | 96c44ef9b3f9ab6e0694cd91ef465f138ecd7c3f (patch) | |
| tree | a71a3687506c0a0534c22ee20b599d3bde282c4d | |
| parent | 344a61e69b6b06aa98b6ba21cac980929507d403 (diff) | |
| parent | dab1c57723d4ab53b9279801f6a27db94bdec98a (diff) | |
| download | rust-96c44ef9b3f9ab6e0694cd91ef465f138ecd7c3f.tar.gz rust-96c44ef9b3f9ab6e0694cd91ef465f138ecd7c3f.zip | |
Rollup merge of #134892 - alex:codegen-55147, r=durin42
Added codegen test for elidings bounds check when indexes are manually checked Closes #55147
| -rw-r--r-- | tests/codegen/slice-indexing.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/codegen/slice-indexing.rs b/tests/codegen/slice-indexing.rs index 3d284148db2..75112bb0c24 100644 --- a/tests/codegen/slice-indexing.rs +++ b/tests/codegen/slice-indexing.rs @@ -60,3 +60,40 @@ pub unsafe fn str_get_unchecked_mut_by_range(x: &mut str, r: Range<usize>) -> &m // CHECK: sub nuw i64 x.get_unchecked_mut(r) } + +// CHECK-LABEL: @slice_repeated_indexing( +#[no_mangle] +pub fn slice_repeated_indexing(dst: &mut [u8], offset: usize) { + let mut i = offset; + // CHECK: panic_bounds_check + dst[i] = 1; + i += 1; + // CHECK: panic_bounds_check + dst[i] = 2; + i += 1; + // CHECK: panic_bounds_check + dst[i] = 3; + i += 1; + // CHECK: panic_bounds_check + dst[i] = 4; +} + +// CHECK-LABEL: @slice_repeated_indexing_coalesced( +#[no_mangle] +pub fn slice_repeated_indexing_coalesced(dst: &mut [u8], offset: usize) { + let mut i = offset; + if i.checked_add(4).unwrap() <= dst.len() { + // CHECK-NOT: panic_bounds_check + dst[i] = 1; + i += 1; + // CHECK-NOT: panic_bounds_check + dst[i] = 2; + i += 1; + // CHECK-NOT: panic_bounds_check + dst[i] = 3; + i += 1; + // CHECK-NOT: panic_bounds_check + dst[i] = 4; + } + // CHECK: ret +} |
