1
Fork 0

remove unnecessary frame parameter from after_local_allocated

This commit is contained in:
Ralf Jung 2024-03-09 18:28:29 +01:00
parent 4497990dff
commit c3342b41b5
4 changed files with 5 additions and 6 deletions

View file

@ -1,5 +1,4 @@
use std::cell::Cell; use std::cell::Cell;
use std::ptr;
use std::{fmt, mem}; use std::{fmt, mem};
use either::{Either, Left, Right}; use either::{Either, Left, Right};
@ -278,9 +277,11 @@ impl<'mir, 'tcx, Prov: Provenance, Extra> Frame<'mir, 'tcx, Prov, Extra> {
}) })
} }
/// Returns the address of the buffer where the locals are stored. This is used by `Place` as a
/// sanity check to detect bugs where we mix up which stack frame a place refers to.
#[inline(always)] #[inline(always)]
pub(super) fn locals_addr(&self) -> usize { pub(super) fn locals_addr(&self) -> usize {
ptr::addr_of!(self.locals).addr() self.locals.raw.as_ptr().addr()
} }
} }

View file

@ -508,7 +508,6 @@ pub trait Machine<'mir, 'tcx: 'mir>: Sized {
#[inline(always)] #[inline(always)]
fn after_local_allocated( fn after_local_allocated(
_ecx: &mut InterpCx<'mir, 'tcx, Self>, _ecx: &mut InterpCx<'mir, 'tcx, Self>,
_frame: usize,
_local: mir::Local, _local: mir::Local,
_mplace: &MPlaceTy<'tcx, Self::Provenance>, _mplace: &MPlaceTy<'tcx, Self::Provenance>,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {

View file

@ -940,7 +940,7 @@ where
mplace.mplace, mplace.mplace,
)?; )?;
} }
M::after_local_allocated(self, self.frame_idx(), local, &mplace)?; M::after_local_allocated(self, local, &mplace)?;
// Now we can call `access_mut` again, asserting it goes well, and actually // Now we can call `access_mut` again, asserting it goes well, and actually
// overwrite things. This points to the entire allocation, not just the part // overwrite things. This points to the entire allocation, not just the part
// the place refers to, i.e. we do this before we apply `offset`. // the place refers to, i.e. we do this before we apply `offset`.

View file

@ -1473,14 +1473,13 @@ impl<'mir, 'tcx> Machine<'mir, 'tcx> for MiriMachine<'mir, 'tcx> {
fn after_local_allocated( fn after_local_allocated(
ecx: &mut InterpCx<'mir, 'tcx, Self>, ecx: &mut InterpCx<'mir, 'tcx, Self>,
frame: usize,
local: mir::Local, local: mir::Local,
mplace: &MPlaceTy<'tcx, Provenance>, mplace: &MPlaceTy<'tcx, Provenance>,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
let Some(Provenance::Concrete { alloc_id, .. }) = mplace.ptr().provenance else { let Some(Provenance::Concrete { alloc_id, .. }) = mplace.ptr().provenance else {
panic!("after_local_allocated should only be called on fresh allocations"); panic!("after_local_allocated should only be called on fresh allocations");
}; };
let local_decl = &ecx.active_thread_stack()[frame].body.local_decls[local]; let local_decl = &ecx.frame().body.local_decls[local];
let span = local_decl.source_info.span; let span = local_decl.source_info.span;
ecx.machine.allocation_spans.borrow_mut().insert(alloc_id, (span, None)); ecx.machine.allocation_spans.borrow_mut().insert(alloc_id, (span, None));
Ok(()) Ok(())