47 lines
790 B
Rust
47 lines
790 B
Rust
//@ 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();
|
|
}
|
|
}
|
|
}
|