fix casting integers to pointers

This commit is contained in:
Ralf Jung 2017-07-20 13:52:58 -07:00
parent 6143ef03c3
commit f960f4c537
2 changed files with 6 additions and 3 deletions

View File

@ -12,10 +12,10 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
src_ty: Ty<'tcx>,
dest_ty: Ty<'tcx>
) -> EvalResult<'tcx, PrimVal> {
let kind = self.ty_to_primval_kind(src_ty)?;
let src_kind = self.ty_to_primval_kind(src_ty)?;
use value::PrimValKind::*;
match kind {
match src_kind {
F32 => self.cast_float(val.to_f32()? as f64, dest_ty),
F64 => self.cast_float(val.to_f64()?, dest_ty),
@ -81,7 +81,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
TyChar => Err(EvalError::InvalidChar(v)),
// No alignment check needed for raw pointers
TyRawPtr(_) => Ok(PrimVal::Bytes(v % (1 << self.memory.pointer_size()))),
TyRawPtr(_) => Ok(PrimVal::Bytes(v % (1 << (self.memory.pointer_size()*8)))),
_ => Err(EvalError::Unimplemented(format!("int to {:?} cast", ty))),
}

View File

@ -29,4 +29,7 @@ fn main() {
let x : fn() -> i32 = unsafe { mem::transmute(y as *mut u8) };
assert_eq!(x(), 42);
}
// involving types other than usize
assert_eq!((-1i32) as usize as *const i32 as usize, (-1i32) as usize);
}