Skip to content

Commit

Permalink
Rollup merge of rust-lang#65319 - RalfJung:memory, r=Centril
Browse files Browse the repository at this point in the history
InterpCx: make memory field public

I made this field private forever ago because I thought sealing things might be nice. But with the `memory_mut` getter it doesn't actually seal anything, and it's not like we need to invalidate caches on writes to memory or so. And moreover, having to use the getters leads to some annoying borrow checking interactions.

So, let's just make it public (again).

r? @oli-obk
  • Loading branch information
Centril committed Oct 16, 2019
2 parents c2e7380 + 715ffab commit 20cbfd3
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 17 deletions.
12 changes: 1 addition & 11 deletions src/librustc_mir/interpret/eval_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ pub struct InterpCx<'mir, 'tcx, M: Machine<'mir, 'tcx>> {
pub(crate) param_env: ty::ParamEnv<'tcx>,

/// The virtual memory system.
pub(crate) memory: Memory<'mir, 'tcx, M>,
pub memory: Memory<'mir, 'tcx, M>,

/// The virtual call stack.
pub(crate) stack: Vec<Frame<'mir, 'tcx, M::PointerTag, M::FrameExtra>>,
Expand Down Expand Up @@ -211,16 +211,6 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
}
}

#[inline(always)]
pub fn memory(&self) -> &Memory<'mir, 'tcx, M> {
&self.memory
}

#[inline(always)]
pub fn memory_mut(&mut self) -> &mut Memory<'mir, 'tcx, M> {
&mut self.memory
}

#[inline(always)]
pub fn force_ptr(
&self,
Expand Down
7 changes: 3 additions & 4 deletions src/librustc_mir/interpret/intern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@ fn intern_shallow<'rt, 'mir, 'tcx>(
);
// remove allocation
let tcx = ecx.tcx;
let memory = ecx.memory_mut();
let (kind, mut alloc) = match memory.alloc_map.remove(&alloc_id) {
let (kind, mut alloc) = match ecx.memory.alloc_map.remove(&alloc_id) {
Some(entry) => entry,
None => {
// Pointer not found in local memory map. It is either a pointer to the global
Expand Down Expand Up @@ -332,7 +331,7 @@ pub fn intern_const_alloc_recursive(

let mut todo: Vec<_> = leftover_allocations.iter().cloned().collect();
while let Some(alloc_id) = todo.pop() {
if let Some((_, mut alloc)) = ecx.memory_mut().alloc_map.remove(&alloc_id) {
if let Some((_, mut alloc)) = ecx.memory.alloc_map.remove(&alloc_id) {
// We can't call the `intern_shallow` method here, as its logic is tailored to safe
// references and a `leftover_allocations` set (where we only have a todo-list here).
// So we hand-roll the interning logic here again.
Expand All @@ -350,7 +349,7 @@ pub fn intern_const_alloc_recursive(
todo.push(reloc);
}
}
} else if ecx.memory().dead_alloc_map.contains_key(&alloc_id) {
} else if ecx.memory.dead_alloc_map.contains_key(&alloc_id) {
// dangling pointer
throw_unsup!(ValidationFailure("encountered dangling pointer in final constant".into()))
}
Expand Down
4 changes: 2 additions & 2 deletions src/librustc_mir/interpret/terminator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,12 +140,12 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
.read_immediate(self.eval_operand(len, None)?)
.expect("can't eval len")
.to_scalar()?
.to_bits(self.memory().pointer_size())? as u64;
.to_bits(self.memory.pointer_size())? as u64;
let index = self
.read_immediate(self.eval_operand(index, None)?)
.expect("can't eval index")
.to_scalar()?
.to_bits(self.memory().pointer_size())? as u64;
.to_bits(self.memory.pointer_size())? as u64;
err_panic!(BoundsCheck { len, index })
}
Overflow(op) => err_panic!(Overflow(*op)),
Expand Down

0 comments on commit 20cbfd3

Please sign in to comment.