about summary refs log tree commit diff
path: root/tests/codegen-llvm
diff options
context:
space:
mode:
authorokaneco <47607823+okaneco@users.noreply.github.com>2025-08-07 14:22:58 -0400
committerokaneco <47607823+okaneco@users.noreply.github.com>2025-08-07 15:11:52 -0400
commit163594c8f81fc6bb8bb37645eac2f3b7da0be518 (patch)
treee285f6e4147535fa068948d345be55624195f2dc /tests/codegen-llvm
parentcd434309efcf5dc68b253e5ef6ba40c1c43711c9 (diff)
downloadrust-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.rs19
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
+    }
+}