Skip to content

Commit

Permalink
Rollup merge of rust-lang#55916 - RalfJung:mut-visitor, r=oli-obk
Browse files Browse the repository at this point in the history
Make miri value visitor usfeful for mutation

This is based on top of rust-lang#55716, [click here](RalfJung/rust@escape-to-raw...RalfJung:mut-visitor) for just the new commits.

r? @oli-obk
  • Loading branch information
pietroalbini committed Nov 16, 2018
2 parents 1d4c2a1 + e4d03f8 commit eef9507
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/librustc_mir/interpret/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@ pub use self::machine::{Machine, AllocMap, MayLeak};

pub use self::operand::{ScalarMaybeUndef, Immediate, ImmTy, Operand, OpTy};

pub use self::visitor::ValueVisitor;
pub use self::visitor::{ValueVisitor, MutValueVisitor};

pub use self::validity::RefTracking;
5 changes: 3 additions & 2 deletions src/librustc_mir/interpret/validity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use rustc::mir::interpret::{
};

use super::{
OpTy, MPlaceTy, ImmTy, Machine, EvalContext, ValueVisitor
OpTy, MPlaceTy, Machine, EvalContext, ValueVisitor
};

macro_rules! validation_failure {
Expand Down Expand Up @@ -281,8 +281,9 @@ impl<'rt, 'a, 'mir, 'tcx, M: Machine<'a, 'mir, 'tcx>>
}
}

fn visit_primitive(&mut self, value: ImmTy<'tcx, M::PointerTag>) -> EvalResult<'tcx>
fn visit_primitive(&mut self, value: OpTy<'tcx, M::PointerTag>) -> EvalResult<'tcx>
{
let value = self.ecx.read_immediate(value)?;
// Go over all the primitive types
let ty = value.layout.ty;
match ty.sty {
Expand Down
12 changes: 6 additions & 6 deletions src/librustc_mir/interpret/visitor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use rustc::mir::interpret::{
};

use super::{
Machine, EvalContext, MPlaceTy, OpTy, ImmTy,
Machine, EvalContext, MPlaceTy, OpTy,
};

// A thing that we can project into, and that has a layout.
Expand Down Expand Up @@ -201,9 +201,11 @@ macro_rules! make_value_visitor {
{ Ok(()) }

/// Called whenever we reach a value of primitive type. There can be no recursion
/// below such a value. This is the leave function.
/// below such a value. This is the leaf function.
/// We do *not* provide an `ImmTy` here because some implementations might want
/// to write to the place this primitive lives in.
#[inline(always)]
fn visit_primitive(&mut self, _val: ImmTy<'tcx, M::PointerTag>) -> EvalResult<'tcx>
fn visit_primitive(&mut self, _v: Self::V) -> EvalResult<'tcx>
{ Ok(()) }

// Default recursors. Not meant to be overloaded.
Expand Down Expand Up @@ -279,9 +281,7 @@ macro_rules! make_value_visitor {
_ => v.layout().ty.builtin_deref(true).is_some(),
};
if primitive {
let op = v.to_op(self.ecx())?;
let val = self.ecx().read_immediate(op)?;
return self.visit_primitive(val);
return self.visit_primitive(v);
}

// Proceed into the fields.
Expand Down

0 comments on commit eef9507

Please sign in to comment.