Auto merge of #15244 - HKalbasi:mir, r=HKalbasi
Support read_via_copy intrinsic
This commit is contained in:
commit
dcda13ac69
@ -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]
|
||||
fn const_eval_select() {
|
||||
check_number(
|
||||
|
@ -888,6 +888,13 @@ fn exec_intrinsic(
|
||||
}
|
||||
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}"),
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user