Skip to content

Commit 5888556

Browse files
committed
Pass ImmTy by reference not value
1 parent fe0c46d commit 5888556

File tree

5 files changed

+10
-10
lines changed

5 files changed

+10
-10
lines changed

compiler/rustc_mir/src/interpret/cast.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
3232

3333
Misc => {
3434
let src = self.read_immediate(src)?;
35-
let res = self.misc_cast(src, cast_ty)?;
35+
let res = self.misc_cast(&src, cast_ty)?;
3636
self.write_immediate(res, dest)?;
3737
}
3838

@@ -107,7 +107,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
107107

108108
fn misc_cast(
109109
&self,
110-
src: ImmTy<'tcx, M::PointerTag>,
110+
src: &ImmTy<'tcx, M::PointerTag>,
111111
cast_ty: Ty<'tcx>,
112112
) -> InterpResult<'tcx, Immediate<M::PointerTag>> {
113113
use rustc_middle::ty::TyKind::*;
@@ -158,13 +158,13 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
158158
let dest_layout = self.layout_of(cast_ty)?;
159159
if dest_layout.size == src.layout.size {
160160
// Thin or fat pointer that just hast the ptr kind of target type changed.
161-
return Ok(*src);
161+
return Ok(**src);
162162
} else {
163163
// Casting the metadata away from a fat ptr.
164164
assert_eq!(src.layout.size, 2 * self.memory.pointer_size());
165165
assert_eq!(dest_layout.size, self.memory.pointer_size());
166166
assert!(src.layout.ty.is_unsafe_ptr());
167-
return match *src {
167+
return match **src {
168168
Immediate::ScalarPair(data, _) => Ok(data.into()),
169169
Immediate::Scalar(..) => span_bug!(
170170
self.cur_span(),

compiler/rustc_mir/src/interpret/intern.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: CompileTimeMachine<'mir, 'tcx, const_eval::Memory
198198
let ty = mplace.layout.ty;
199199
if let ty::Ref(_, referenced_ty, ref_mutability) = *ty.kind() {
200200
let value = self.ecx.read_immediate(&(*mplace).into())?;
201-
let mplace = self.ecx.ref_to_mplace(value)?;
201+
let mplace = self.ecx.ref_to_mplace(&value)?;
202202
assert_eq!(mplace.layout.ty, referenced_ty);
203203
// Handle trait object vtables.
204204
if let ty::Dynamic(..) =

compiler/rustc_mir/src/interpret/intrinsics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
143143
sym::min_align_of_val | sym::size_of_val => {
144144
// Avoid `deref_operand` -- this is not a deref, the ptr does not have to be
145145
// dereferencable!
146-
let place = self.ref_to_mplace(self.read_immediate(&args[0])?)?;
146+
let place = self.ref_to_mplace(&self.read_immediate(&args[0])?)?;
147147
let (size, align) = self
148148
.size_and_align_of_mplace(place)?
149149
.ok_or_else(|| err_unsup_format!("`extern type` does not have known layout"))?;

compiler/rustc_mir/src/interpret/place.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -303,12 +303,12 @@ where
303303
/// Generally prefer `deref_operand`.
304304
pub fn ref_to_mplace(
305305
&self,
306-
val: ImmTy<'tcx, M::PointerTag>,
306+
val: &ImmTy<'tcx, M::PointerTag>,
307307
) -> InterpResult<'tcx, MPlaceTy<'tcx, M::PointerTag>> {
308308
let pointee_type =
309309
val.layout.ty.builtin_deref(true).expect("`ref_to_mplace` called on non-ptr type").ty;
310310
let layout = self.layout_of(pointee_type)?;
311-
let (ptr, meta) = match *val {
311+
let (ptr, meta) = match **val {
312312
Immediate::Scalar(ptr) => (ptr.check_init()?, MemPlaceMeta::None),
313313
Immediate::ScalarPair(ptr, meta) => {
314314
(ptr.check_init()?, MemPlaceMeta::Meta(meta.check_init()?))
@@ -335,7 +335,7 @@ where
335335
) -> InterpResult<'tcx, MPlaceTy<'tcx, M::PointerTag>> {
336336
let val = self.read_immediate(src)?;
337337
trace!("deref to {} on {:?}", val.layout.ty, *val);
338-
let place = self.ref_to_mplace(val)?;
338+
let place = self.ref_to_mplace(&val)?;
339339
self.mplace_access_checked(place, None)
340340
}
341341

compiler/rustc_mir/src/interpret/validity.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
386386
// Handle wide pointers.
387387
// Check metadata early, for better diagnostics
388388
let place = try_validation!(
389-
self.ecx.ref_to_mplace(value),
389+
self.ecx.ref_to_mplace(&value),
390390
self.path,
391391
err_ub!(InvalidUninitBytes(None)) => { "uninitialized {}", kind },
392392
);

0 commit comments

Comments
 (0)