Skip to content

Commit a1cff1c

Browse files
committed
Small refactorings for miri.
1 parent 63ed625 commit a1cff1c

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

compiler/rustc_mir/src/interpret/operand.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,19 @@ impl<'tcx, Tag: Provenance> Immediate<Tag> {
6363
Immediate::ScalarPair(val.into(), Scalar::from_machine_usize(len, cx).into())
6464
}
6565

66-
pub fn new_dyn_trait(val: Scalar<Tag>, vtable: Pointer<Tag>, cx: &impl HasDataLayout) -> Self {
67-
Immediate::ScalarPair(val.into(), ScalarMaybeUninit::from_pointer(vtable, cx))
66+
pub fn new_dyn_trait(
67+
val: Scalar<Tag>,
68+
vtable: Pointer<Option<Tag>>,
69+
cx: &impl HasDataLayout,
70+
) -> Self {
71+
Immediate::ScalarPair(val.into(), ScalarMaybeUninit::from_maybe_pointer(vtable, cx))
6872
}
6973

7074
#[inline]
7175
pub fn to_scalar_or_uninit(self) -> ScalarMaybeUninit<Tag> {
7276
match self {
7377
Immediate::Scalar(val) => val,
74-
Immediate::ScalarPair(..) => bug!("Got a wide pointer where a scalar was expected"),
78+
Immediate::ScalarPair(..) => bug!("Got a scalar pair where a scalar was expected"),
7579
}
7680
}
7781

@@ -85,7 +89,7 @@ impl<'tcx, Tag: Provenance> Immediate<Tag> {
8589
match self {
8690
Immediate::ScalarPair(val1, val2) => Ok((val1.check_init()?, val2.check_init()?)),
8791
Immediate::Scalar(..) => {
88-
bug!("Got a scalar where a wide pointer was expected")
92+
bug!("Got a scalar where a scalar pair was expected")
8993
}
9094
}
9195
}

compiler/rustc_mir/src/interpret/traits.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
2121
&mut self,
2222
ty: Ty<'tcx>,
2323
poly_trait_ref: Option<ty::PolyExistentialTraitRef<'tcx>>,
24-
) -> InterpResult<'tcx, Pointer<M::PointerTag>> {
24+
) -> InterpResult<'tcx, Pointer<Option<M::PointerTag>>> {
2525
trace!("get_vtable(trait_ref={:?})", poly_trait_ref);
2626

2727
let (ty, poly_trait_ref) = self.tcx.erase_regions((ty, poly_trait_ref));
@@ -34,7 +34,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
3434

3535
let vtable_ptr = self.memory.global_base_pointer(Pointer::from(vtable_allocation))?;
3636

37-
Ok(vtable_ptr)
37+
Ok(vtable_ptr.into())
3838
}
3939

4040
/// Resolves the function at the specified slot in the provided
@@ -126,21 +126,16 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
126126
&self,
127127
vtable: Pointer<Option<M::PointerTag>>,
128128
idx: u64,
129-
) -> InterpResult<'tcx, Pointer<M::PointerTag>> {
129+
) -> InterpResult<'tcx, Pointer<Option<M::PointerTag>>> {
130130
let pointer_size = self.pointer_size();
131131

132-
let vtable = self
132+
let vtable_slot = vtable.offset(pointer_size * idx, self)?;
133+
let new_vtable = self
133134
.memory
134-
.get(
135-
vtable,
136-
pointer_size * idx.checked_add(1).unwrap(),
137-
self.tcx.data_layout.pointer_align.abi,
138-
)?
135+
.get(vtable_slot, pointer_size, self.tcx.data_layout.pointer_align.abi)?
139136
.expect("cannot be a ZST");
140-
let new_vtable = self
141-
.scalar_to_ptr(vtable.read_ptr_sized(pointer_size * idx)?.check_init()?)
142-
.into_pointer_or_addr()
143-
.expect("should be a pointer");
137+
138+
let new_vtable = self.scalar_to_ptr(new_vtable.read_ptr_sized(Size::ZERO)?.check_init()?);
144139

145140
Ok(new_vtable)
146141
}

0 commit comments

Comments
 (0)