|  | //@ compile-flags: -Copt-level=3 -Z merge-functions=disabled | 
|  | #![crate_type = "lib"] | 
|  |  | 
|  | // This tests that LLVM can optimize based on the niches in the source or | 
|  | // destination types for casts. | 
|  |  | 
|  | // CHECK-LABEL: @u32_index | 
|  | #[no_mangle] | 
|  | pub fn u32_index(c: u32) -> [bool; 22] { | 
|  | let mut array = [false; 22]; | 
|  |  | 
|  | let index = 32 - c.leading_zeros(); | 
|  |  | 
|  | // CHECK: call core::panicking::panic | 
|  | array[index as usize] = true; | 
|  |  | 
|  | array | 
|  | } | 
|  |  | 
|  | // CHECK-LABEL: @char_as_u32_index | 
|  | #[no_mangle] | 
|  | pub fn char_as_u32_index(c: char) -> [bool; 22] { | 
|  | let c = c as u32; | 
|  |  | 
|  | let mut array = [false; 22]; | 
|  |  | 
|  | let index = 32 - c.leading_zeros(); | 
|  |  | 
|  | // CHECK-NOT: call core::panicking::panic | 
|  | array[index as usize] = true; | 
|  |  | 
|  | array | 
|  | } |