Skip to content

Commit c105f86

Browse files
committed
Address PR feedback
1 parent c79c53a commit c105f86

File tree

2 files changed

+10
-15
lines changed

2 files changed

+10
-15
lines changed

compiler/rustc_const_eval/src/interpret/operand.rs

-11
Original file line numberDiff line numberDiff line change
@@ -583,17 +583,6 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
583583
Ok(self.read_immediate(op)?.to_scalar())
584584
}
585585

586-
pub fn read_mem_place_meta(
587-
&self,
588-
op: &impl Readable<'tcx, M::Provenance>,
589-
) -> InterpResult<'tcx, MemPlaceMeta<M::Provenance>> {
590-
Ok(if op.layout().is_zst() {
591-
MemPlaceMeta::None
592-
} else {
593-
MemPlaceMeta::Meta(self.read_scalar(op)?)
594-
})
595-
}
596-
597586
// Pointer-sized reads are fairly common and need target layout access, so we wrap them in
598587
// convenience functions.
599588

compiler/rustc_const_eval/src/interpret/step.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rustc_middle::mir;
99
use rustc_middle::ty::layout::LayoutOf;
1010
use rustc_target::abi::{FieldIdx, FIRST_VARIANT};
1111

12-
use super::{ImmTy, Immediate, InterpCx, InterpResult, Machine, PlaceTy, Projectable, Scalar};
12+
use super::{ImmTy, Immediate, InterpCx, InterpResult, Machine, MemPlaceMeta, PlaceTy, Projectable, Scalar};
1313
use crate::util;
1414

1515
impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
@@ -304,15 +304,21 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
304304
(variant_index, variant_dest, active_field_index)
305305
}
306306
mir::AggregateKind::RawPtr(..) => {
307-
// Trying to `project_field` into pointers tends not to work,
308-
// so build the `Immediate` from the parts directly.
307+
// Pointers don't have "fields" in the normal sense, so the
308+
// projection-based code below would either fail in projection
309+
// or in type mismatches. Instead, build an `Immediate` from
310+
// the parts and write that to the destination.
309311
let [data, meta] = &operands.raw else {
310312
bug!("{kind:?} should have 2 operands, had {operands:?}");
311313
};
312314
let data = self.eval_operand(data, None)?;
313315
let data = self.read_pointer(&data)?;
314316
let meta = self.eval_operand(meta, None)?;
315-
let meta = self.read_mem_place_meta(&meta)?;
317+
let meta = if meta.layout.is_zst() {
318+
MemPlaceMeta::None
319+
} else {
320+
MemPlaceMeta::Meta(self.read_scalar(&meta)?)
321+
};
316322
let ptr_imm = Immediate::new_pointer_with_meta(data, meta, self);
317323
let ptr = ImmTy::from_immediate(ptr_imm, dest.layout);
318324
self.copy_op(&ptr, dest)?;

0 commit comments

Comments
 (0)