Skip to content

Commit 23d86b0

Browse files
committed
try_read_value_from_ptr -> try_read_value_from_mplace
1 parent 61e7ba1 commit 23d86b0

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

src/librustc_mir/interpret/operand.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -184,23 +184,25 @@ impl<'tcx> OpTy<'tcx> {
184184
impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> {
185185
/// Try reading a value in memory; this is interesting particularily for ScalarPair.
186186
/// Return None if the layout does not permit loading this as a value.
187-
fn try_read_value_from_ptr(
187+
fn try_read_value_from_mplace(
188188
&self,
189-
ptr: Scalar,
190-
ptr_align: Align,
191-
layout: TyLayout<'tcx>,
189+
mplace: MPlaceTy<'tcx>,
192190
) -> EvalResult<'tcx, Option<Value>> {
191+
if mplace.extra != PlaceExtra::None {
192+
return Ok(None);
193+
}
194+
let (ptr, ptr_align) = mplace.to_scalar_ptr_align();
193195
self.memory.check_align(ptr, ptr_align)?;
194196

195-
if layout.size.bytes() == 0 {
197+
if mplace.layout.size.bytes() == 0 {
196198
return Ok(Some(Value::Scalar(ScalarMaybeUndef::Scalar(Scalar::Bits { bits: 0, size: 0 }))));
197199
}
198200

199201
let ptr = ptr.to_ptr()?;
200202

201-
match layout.abi {
203+
match mplace.layout.abi {
202204
layout::Abi::Scalar(..) => {
203-
let scalar = self.memory.read_scalar(ptr, ptr_align, layout.size)?;
205+
let scalar = self.memory.read_scalar(ptr, ptr_align, mplace.layout.size)?;
204206
Ok(Some(Value::Scalar(scalar)))
205207
}
206208
layout::Abi::ScalarPair(ref a, ref b) => {
@@ -226,21 +228,18 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> {
226228
/// in a `Value`, not on which data is stored there currently.
227229
pub(super) fn try_read_value(
228230
&self,
229-
OpTy { op: src, layout } : OpTy<'tcx>,
231+
src : OpTy<'tcx>,
230232
) -> EvalResult<'tcx, Result<Value, MemPlace>> {
231-
match src {
232-
Operand::Indirect(mplace) => {
233-
if mplace.extra == PlaceExtra::None {
234-
if let Some(val) =
235-
self.try_read_value_from_ptr(mplace.ptr, mplace.align, layout)?
236-
{
237-
return Ok(Ok(val));
238-
}
233+
Ok(match src.try_as_mplace() {
234+
Ok(mplace) => {
235+
if let Some(val) = self.try_read_value_from_mplace(mplace)? {
236+
Ok(val)
237+
} else {
238+
Err(*mplace)
239239
}
240-
Ok(Err(mplace))
241240
},
242-
Operand::Immediate(val) => Ok(Ok(val)),
243-
}
241+
Err(val) => Ok(val),
242+
})
244243
}
245244

246245
/// Read a value from a place, asserting that that is possible with the given layout.

0 commit comments

Comments
 (0)