diff options
| author | okaneco <47607823+okaneco@users.noreply.github.com> | 2025-08-07 14:22:58 -0400 |
|---|---|---|
| committer | okaneco <47607823+okaneco@users.noreply.github.com> | 2025-08-07 15:11:52 -0400 |
| commit | 163594c8f81fc6bb8bb37645eac2f3b7da0be518 (patch) | |
| tree | e285f6e4147535fa068948d345be55624195f2dc /tests/codegen-llvm | |
| parent | cd434309efcf5dc68b253e5ef6ba40c1c43711c9 (diff) | |
| download | rust-163594c8f81fc6bb8bb37645eac2f3b7da0be518.tar.gz rust-163594c8f81fc6bb8bb37645eac2f3b7da0be518.zip | |
Add regression test for `saturating_sub` bounds check issue
Add codegen test for issue where `valid_index.saturating_sub(X)` produced an extra bounds check. This was fixed by the LLVM upgrade.
Diffstat (limited to 'tests/codegen-llvm')
| -rw-r--r-- | tests/codegen-llvm/issues/saturating-sub-index-139759.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/codegen-llvm/issues/saturating-sub-index-139759.rs b/tests/codegen-llvm/issues/saturating-sub-index-139759.rs new file mode 100644 index 00000000000..eac2f4d306b --- /dev/null +++ b/tests/codegen-llvm/issues/saturating-sub-index-139759.rs @@ -0,0 +1,19 @@ +// Test that calculating an index with saturating subtraction from an in-bounds +// index doesn't generate another bounds check. + +//@ compile-flags: -Copt-level=3 +//@ min-llvm-version: 21 + +#![crate_type = "lib"] + +// CHECK-LABEL: @bounds_check_is_elided +#[no_mangle] +pub fn bounds_check_is_elided(s: &[i32], index: usize) -> i32 { + // CHECK-NOT: panic_bounds_check + if index < s.len() { + let lower_bound = index.saturating_sub(1); + s[lower_bound] + } else { + -1 + } +} |
