File tree 1 file changed +34
-0
lines changed
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