Auto merge of #15244 - HKalbasi:mir, r=HKalbasi

Support read_via_copy intrinsic
This commit is contained in:
bors 2023-07-09 19:48:54 +00:00
commit dcda13ac69
2 changed files with 25 additions and 0 deletions

View File

@ -163,6 +163,24 @@ fn transmute() {
); );
} }
#[test]
fn read_via_copy() {
check_number(
r#"
extern "rust-intrinsic" {
pub fn read_via_copy<T>(e: *const T) -> T;
pub fn volatile_load<T>(e: *const T) -> T;
}
const GOAL: i32 = {
let x = 2;
read_via_copy(&x) + volatile_load(&x)
};
"#,
4,
);
}
#[test] #[test]
fn const_eval_select() { fn const_eval_select() {
check_number( check_number(

View File

@ -888,6 +888,13 @@ fn exec_intrinsic(
} }
not_supported!("FnOnce was not available for executing const_eval_select"); not_supported!("FnOnce was not available for executing const_eval_select");
} }
"read_via_copy" | "volatile_load" => {
let [arg] = args else {
return Err(MirEvalError::TypeError("read_via_copy args are not provided"));
};
let addr = Address::from_bytes(arg.interval.get(self)?)?;
destination.write_from_interval(self, Interval { addr, size: destination.size })
}
_ => not_supported!("unknown intrinsic {name}"), _ => not_supported!("unknown intrinsic {name}"),
} }
} }