Skip to content

Commit bf66fec

Browse files
committed
Address PR feedback
1 parent f9da286 commit bf66fec

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-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

+12-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ 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::{
13+
ImmTy, Immediate, InterpCx, InterpResult, Machine, MemPlaceMeta, PlaceTy, Projectable, Scalar,
14+
};
1315
use crate::util;
1416

1517
impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
@@ -304,15 +306,21 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
304306
(variant_index, variant_dest, active_field_index)
305307
}
306308
mir::AggregateKind::RawPtr(..) => {
307-
// Trying to `project_field` into pointers tends not to work,
308-
// so build the `Immediate` from the parts directly.
309+
// Pointers don't have "fields" in the normal sense, so the
310+
// projection-based code below would either fail in projection
311+
// or in type mismatches. Instead, build an `Immediate` from
312+
// the parts and write that to the destination.
309313
let [data, meta] = &operands.raw else {
310314
bug!("{kind:?} should have 2 operands, had {operands:?}");
311315
};
312316
let data = self.eval_operand(data, None)?;
313317
let data = self.read_pointer(&data)?;
314318
let meta = self.eval_operand(meta, None)?;
315-
let meta = self.read_mem_place_meta(&meta)?;
319+
let meta = if meta.layout.is_zst() {
320+
MemPlaceMeta::None
321+
} else {
322+
MemPlaceMeta::Meta(self.read_scalar(&meta)?)
323+
};
316324
let ptr_imm = Immediate::new_pointer_with_meta(data, meta, self);
317325
let ptr = ImmTy::from_immediate(ptr_imm, dest.layout);
318326
self.copy_op(&ptr, dest)?;

0 commit comments

Comments
 (0)