File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change 1+ // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // no-system-llvm
12+ // compile-flags: -O
13+ #![ crate_type = "lib" ]
14+
15+ fn search < T : Ord + Eq > ( arr : & mut [ T ] , a : & T ) -> Result < usize , ( ) > {
16+ match arr. iter ( ) . position ( |x| x == a) {
17+ Some ( p) => {
18+ Ok ( p)
19+ } ,
20+ None => Err ( ( ) ) ,
21+ }
22+ }
23+
24+ // CHECK-LABEL: @position_no_bounds_check
25+ #[ no_mangle]
26+ pub fn position_no_bounds_check ( y : & mut [ u32 ] , x : & u32 , z : & u32 ) -> bool {
27+ // This contains "call assume" so we cannot just rule out all calls
28+ // CHECK-NOT: panic
29+ if let Ok ( p) = search ( y, x) {
30+ y[ p] == * z
31+ } else {
32+ false
33+ }
34+ }
You can’t perform that action at this time.
0 commit comments