diff --git a/src/lvalue.rs b/src/lvalue.rs index 2cce67689d72..e86c480aa0b6 100644 --- a/src/lvalue.rs +++ b/src/lvalue.rs @@ -1,6 +1,6 @@ use rustc::hir::def_id::DefId; use rustc::mir; -use rustc::ty::layout::Size; +use rustc::ty::layout::{Size, Align}; use rustc::ty::subst::Substs; use rustc::ty::{self, Ty}; use rustc_data_structures::indexed_vec::Idx; @@ -217,8 +217,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { let offset = match base_extra { LvalueExtra::Vtable(tab) => { let (_, align) = self.size_and_align_of_dst(base_ty, Value::ByValPair(PrimVal::Ptr(base_ptr), PrimVal::Ptr(tab)))?; - // magical formula taken from rustc - (offset.bytes() + (align - 1)) & (-(align as i64) as u64) + offset.abi_align(Align::from_bytes(align, align).unwrap()).bytes() } _ => offset.bytes(), };