| // 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!(), |
| } |
| } |