blob: abc036731fbd122458dbde4004c653c4b89e0814 [file] [edit]
// Matching every possible `u64::trailing_zeros()` result should not keep
// unreachable panic code.
//@ compile-flags: -Copt-level=3
#![crate_type = "lib"]
#[repr(u8)]
pub enum Square {
S0,
S1,
S2,
S3,
S4,
S5,
S6,
S7,
S8,
S9,
S10,
S11,
S12,
S13,
S14,
S15,
S16,
S17,
S18,
S19,
S20,
S21,
S22,
S23,
S24,
S25,
S26,
S27,
S28,
S29,
S30,
S31,
S32,
S33,
S34,
S35,
S36,
S37,
S38,
S39,
S40,
S41,
S42,
S43,
S44,
S45,
S46,
S47,
S48,
S49,
S50,
S51,
S52,
S53,
S54,
S55,
S56,
S57,
S58,
S59,
S60,
S61,
S62,
S63,
S64,
}
// CHECK-LABEL: @trailing_zeros_match
#[no_mangle]
pub fn trailing_zeros_match(v: u64) -> Square {
// CHECK-NOT: core::panicking::panic
// CHECK-NOT: entered unreachable code
// CHECK: ret i8
match v.trailing_zeros() {
0 => Square::S0,
1 => Square::S1,
2 => Square::S2,
3 => Square::S3,
4 => Square::S4,
5 => Square::S5,
6 => Square::S6,
7 => Square::S7,
8 => Square::S8,
9 => Square::S9,
10 => Square::S10,
11 => Square::S11,
12 => Square::S12,
13 => Square::S13,
14 => Square::S14,
15 => Square::S15,
16 => Square::S16,
17 => Square::S17,
18 => Square::S18,
19 => Square::S19,
20 => Square::S20,
21 => Square::S21,
22 => Square::S22,
23 => Square::S23,
24 => Square::S24,
25 => Square::S25,
26 => Square::S26,
27 => Square::S27,
28 => Square::S28,
29 => Square::S29,
30 => Square::S30,
31 => Square::S31,
32 => Square::S32,
33 => Square::S33,
34 => Square::S34,
35 => Square::S35,
36 => Square::S36,
37 => Square::S37,
38 => Square::S38,
39 => Square::S39,
40 => Square::S40,
41 => Square::S41,
42 => Square::S42,
43 => Square::S43,
44 => Square::S44,
45 => Square::S45,
46 => Square::S46,
47 => Square::S47,
48 => Square::S48,
49 => Square::S49,
50 => Square::S50,
51 => Square::S51,
52 => Square::S52,
53 => Square::S53,
54 => Square::S54,
55 => Square::S55,
56 => Square::S56,
57 => Square::S57,
58 => Square::S58,
59 => Square::S59,
60 => Square::S60,
61 => Square::S61,
62 => Square::S62,
63 => Square::S63,
64 => Square::S64,
_ => unreachable!(),
}
}