| //@ compile-flags: -O -Ccodegen-units=1 |
| |
| #![crate_type = "lib"] |
| |
| #[repr(i64)] |
| pub enum Boolean { |
| False = 0, |
| True = 1, |
| } |
| |
| impl Clone for Boolean { |
| fn clone(&self) -> Self { |
| *self |
| } |
| } |
| |
| impl Copy for Boolean {} |
| |
| extern "C" { |
| fn set_value(foo: *mut i64); |
| fn bar(); |
| } |
| |
| pub fn foo(x: bool) { |
| let mut foo = core::mem::MaybeUninit::<i64>::uninit(); |
| unsafe { |
| set_value(foo.as_mut_ptr()); |
| } |
| |
| if x { |
| let l1 = unsafe { *foo.as_mut_ptr().cast::<Boolean>() }; |
| if matches!(l1, Boolean::False) { |
| unsafe { |
| *foo.as_mut_ptr() = 0; |
| } |
| } |
| } |
| |
| let l2 = unsafe { *foo.as_mut_ptr() }; |
| if l2 == 2 { |
| // CHECK: call void @bar |
| unsafe { |
| bar(); |
| } |
| } |
| } |