Rollup merge of #78252 - bugadani:issue-45964, r=Mark-Simulacrum
Add codegen test for #45964 Closes #45964
This commit is contained in:
commit
752bce5197
38
src/test/codegen/issue-45964-bounds-check-slice-pos.rs
Normal file
38
src/test/codegen/issue-45964-bounds-check-slice-pos.rs
Normal file
@ -0,0 +1,38 @@
|
||||
// This test case checks that slice::{r}position functions do not
|
||||
// prevent optimizing away bounds checks
|
||||
|
||||
// compile-flags: -O
|
||||
|
||||
#![crate_type="rlib"]
|
||||
|
||||
// CHECK-LABEL: @test
|
||||
#[no_mangle]
|
||||
pub fn test(y: &[u32], x: &u32, z: &u32) -> bool {
|
||||
let result = match y.iter().position(|a| a == x) {
|
||||
Some(p) => Ok(p),
|
||||
None => Err(()),
|
||||
};
|
||||
|
||||
if let Ok(p) = result {
|
||||
// CHECK-NOT: panic
|
||||
y[p] == *z
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: @rtest
|
||||
#[no_mangle]
|
||||
pub fn rtest(y: &[u32], x: &u32, z: &u32) -> bool {
|
||||
let result = match y.iter().rposition(|a| a == x) {
|
||||
Some(p) => Ok(p),
|
||||
None => Err(()),
|
||||
};
|
||||
|
||||
if let Ok(p) = result {
|
||||
// CHECK-NOT: panic
|
||||
y[p] == *z
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user