Support intrinsics::overflowing_sub for vec![x; n].
This commit is contained in:
parent
dc5fbf17ca
commit
69f41facb9
2 changed files with 20 additions and 0 deletions
|
@ -413,6 +413,21 @@ impl<'a, 'tcx: 'a, 'arena> Interpreter<'a, 'tcx, 'arena> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME(tsion): Handle different integer types correctly. Use primvals?
|
||||||
|
"overflowing_sub" => {
|
||||||
|
let ty = *substs.types.get(subst::FnSpace, 0);
|
||||||
|
let size = self.ty_size(ty);
|
||||||
|
|
||||||
|
let left_arg = try!(self.eval_operand(&args[0]));
|
||||||
|
let right_arg = try!(self.eval_operand(&args[1]));
|
||||||
|
|
||||||
|
let left = try!(self.memory.read_int(left_arg, size));
|
||||||
|
let right = try!(self.memory.read_int(right_arg, size));
|
||||||
|
|
||||||
|
let n = left.wrapping_sub(right);
|
||||||
|
try!(self.memory.write_int(dest, n, size));
|
||||||
|
}
|
||||||
|
|
||||||
"size_of" => {
|
"size_of" => {
|
||||||
let ty = *substs.types.get(subst::FnSpace, 0);
|
let ty = *substs.types.get(subst::FnSpace, 0);
|
||||||
let size = self.ty_size(ty) as u64;
|
let size = self.ty_size(ty) as u64;
|
||||||
|
|
|
@ -14,6 +14,11 @@ fn make_vec_macro() -> Vec<i32> {
|
||||||
vec![1, 2]
|
vec![1, 2]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[miri_run]
|
||||||
|
fn make_vec_macro_repeat() -> Vec<u8> {
|
||||||
|
vec![42; 8]
|
||||||
|
}
|
||||||
|
|
||||||
#[miri_run]
|
#[miri_run]
|
||||||
fn vec_int_iter() -> i32 {
|
fn vec_int_iter() -> i32 {
|
||||||
vec![1, 2, 3, 4].into_iter().fold(0, |x, y| x + y)
|
vec![1, 2, 3, 4].into_iter().fold(0, |x, y| x + y)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue