Skip to content

Commit ff7855a

Browse files
committed
InterpCx.read_size_and_align_from_vtable to InterpCx.read_mem_pos_from_vtable
1 parent 6ad2bed commit ff7855a

File tree

4 files changed

+9
-10
lines changed

4 files changed

+9
-10
lines changed

src/librustc_mir/interpret/eval_context.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,8 +448,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
448448
ty::Dynamic(..) => {
449449
let vtable = metadata.expect("dyn trait fat ptr must have vtable");
450450
// Read size and align from vtable (already checks size).
451-
let (size, align) = self.read_size_and_align_from_vtable(vtable)?;
452-
let mem_pos = MemoryPosition::new(size, align);
451+
let mem_pos = self.read_mem_pos_from_vtable(vtable)?;
452+
453453
Ok(Some(mem_pos))
454454
}
455455

src/librustc_mir/interpret/place.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,10 +1130,9 @@ where
11301130

11311131
// More sanity checks
11321132
if cfg!(debug_assertions) {
1133-
let (size, align) = self.read_size_and_align_from_vtable(vtable)?;
1134-
assert_eq!(size, layout.pref_pos.size);
1133+
let mem_pos = self.read_mem_pos_from_vtable(vtable)?;
11351134
// only ABI alignment is preserved
1136-
assert_eq!(align, layout.pref_pos.align.abi);
1135+
assert_eq!(mem_pos, layout.pref_pos.mem_pos());
11371136
}
11381137

11391138
let mplace = MPlaceTy {

src/librustc_mir/interpret/traits.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use rustc::ty::{self, Ty, Instance, TypeFoldable};
2-
use rustc::ty::layout::{Size, Align, LayoutOf, HasDataLayout};
2+
use rustc::ty::layout::{Size, MemoryPosition, Align, LayoutOf, HasDataLayout};
33
use rustc::mir::interpret::{Scalar, Pointer, InterpResult, PointerArithmetic,};
44

55
use super::{InterpCx, Machine, MemoryKind, FnVal};
@@ -123,10 +123,10 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
123123
Ok((drop_instance, ty))
124124
}
125125

126-
pub fn read_size_and_align_from_vtable(
126+
pub fn read_mem_pos_from_vtable(
127127
&self,
128128
vtable: Scalar<M::PointerTag>,
129-
) -> InterpResult<'tcx, (Size, Align)> {
129+
) -> InterpResult<'tcx, MemoryPosition> {
130130
let ptr_pos = self.pointer_pos().mem_pos();
131131
// We check for size = 3*ptr_size, that covers the drop fn (unused here),
132132
// the size, and the align (which we read below).
@@ -150,6 +150,6 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
150150
throw_ub_format!("invalid vtable: \
151151
size is bigger than largest supported object");
152152
}
153-
Ok((Size::from_bytes(size), Align::from_bytes(align).unwrap()))
153+
Ok(MemoryPosition::new(Size::from_bytes(size), Align::from_bytes(align).unwrap()))
154154
}
155155
}

src/librustc_mir/interpret/validity.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ impl<'rt, 'mir, 'tcx, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, 'tcx, M
276276
);
277277
try_validation!(self.ecx.read_drop_type_from_vtable(vtable),
278278
"invalid drop fn in vtable", self.path);
279-
try_validation!(self.ecx.read_size_and_align_from_vtable(vtable),
279+
try_validation!(self.ecx.read_mem_pos_from_vtable(vtable),
280280
"invalid size or align in vtable", self.path);
281281
// FIXME: More checks for the vtable.
282282
}

0 commit comments

Comments
 (0)