interpret: pass Size and Align to before_memory_deallocation

This commit is contained in:
Ralf Jung 2024-03-09 13:50:39 +01:00
parent 79d246112d
commit 16e869a678
7 changed files with 18 additions and 15 deletions

View File

@ -433,7 +433,8 @@ fn before_memory_deallocation(
_machine: &mut Self, _machine: &mut Self,
_alloc_extra: &mut Self::AllocExtra, _alloc_extra: &mut Self::AllocExtra,
_prov: (AllocId, Self::ProvenanceExtra), _prov: (AllocId, Self::ProvenanceExtra),
_range: AllocRange, _size: Size,
_align: Align,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
Ok(()) Ok(())
} }

View File

@ -345,7 +345,8 @@ pub fn deallocate_ptr(
&mut self.machine, &mut self.machine,
&mut alloc.extra, &mut alloc.extra,
(alloc_id, prov), (alloc_id, prov),
alloc_range(Size::ZERO, size), size,
alloc.align,
)?; )?;
// Don't forget to remember size and align of this now-dead allocation // Don't forget to remember size and align of this now-dead allocation

View File

@ -472,14 +472,14 @@ pub fn before_memory_deallocation<'tcx>(
&mut self, &mut self,
alloc_id: AllocId, alloc_id: AllocId,
prov_extra: ProvenanceExtra, prov_extra: ProvenanceExtra,
range: AllocRange, size: Size,
machine: &MiriMachine<'_, 'tcx>, machine: &MiriMachine<'_, 'tcx>,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
match self { match self {
AllocState::StackedBorrows(sb) => AllocState::StackedBorrows(sb) =>
sb.get_mut().before_memory_deallocation(alloc_id, prov_extra, range, machine), sb.get_mut().before_memory_deallocation(alloc_id, prov_extra, size, machine),
AllocState::TreeBorrows(tb) => AllocState::TreeBorrows(tb) =>
tb.get_mut().before_memory_deallocation(alloc_id, prov_extra, range, machine), tb.get_mut().before_memory_deallocation(alloc_id, prov_extra, size, machine),
} }
} }

View File

@ -574,13 +574,13 @@ pub fn before_memory_deallocation<'tcx>(
&mut self, &mut self,
alloc_id: AllocId, alloc_id: AllocId,
tag: ProvenanceExtra, tag: ProvenanceExtra,
range: AllocRange, size: Size,
machine: &MiriMachine<'_, 'tcx>, machine: &MiriMachine<'_, 'tcx>,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
trace!("deallocation with tag {:?}: {:?}, size {}", tag, alloc_id, range.size.bytes()); trace!("deallocation with tag {:?}: {:?}, size {}", tag, alloc_id, size.bytes());
let dcx = DiagnosticCxBuilder::dealloc(machine, tag); let dcx = DiagnosticCxBuilder::dealloc(machine, tag);
let state = machine.borrow_tracker.as_ref().unwrap().borrow(); let state = machine.borrow_tracker.as_ref().unwrap().borrow();
self.for_each(range, dcx, |stack, dcx, exposed_tags| { self.for_each(alloc_range(Size::ZERO, size), dcx, |stack, dcx, exposed_tags| {
stack.dealloc(tag, &state, dcx, exposed_tags) stack.dealloc(tag, &state, dcx, exposed_tags)
})?; })?;
Ok(()) Ok(())

View File

@ -80,7 +80,7 @@ pub fn before_memory_deallocation(
&mut self, &mut self,
alloc_id: AllocId, alloc_id: AllocId,
prov: ProvenanceExtra, prov: ProvenanceExtra,
range: AllocRange, size: Size,
machine: &MiriMachine<'_, 'tcx>, machine: &MiriMachine<'_, 'tcx>,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
// TODO: for now we bail out on wildcard pointers. Eventually we should // TODO: for now we bail out on wildcard pointers. Eventually we should
@ -91,7 +91,7 @@ pub fn before_memory_deallocation(
}; };
let global = machine.borrow_tracker.as_ref().unwrap(); let global = machine.borrow_tracker.as_ref().unwrap();
let span = machine.current_span(); let span = machine.current_span();
self.dealloc(tag, range, global, alloc_id, span) self.dealloc(tag, alloc_range(Size::ZERO, size), global, alloc_id, span)
} }
pub fn expose_tag(&mut self, _tag: BorTag) { pub fn expose_tag(&mut self, _tag: BorTag) {

View File

@ -1071,10 +1071,10 @@ pub fn write<'tcx>(
pub fn deallocate<'tcx>( pub fn deallocate<'tcx>(
&mut self, &mut self,
alloc_id: AllocId, alloc_id: AllocId,
range: AllocRange, size: Size,
machine: &mut MiriMachine<'_, '_>, machine: &mut MiriMachine<'_, '_>,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
self.unique_access(alloc_id, range, NaWriteType::Deallocate, machine) self.unique_access(alloc_id, alloc_range(Size::ZERO, size), NaWriteType::Deallocate, machine)
} }
} }

View File

@ -1288,16 +1288,17 @@ fn before_memory_deallocation(
machine: &mut Self, machine: &mut Self,
alloc_extra: &mut AllocExtra<'tcx>, alloc_extra: &mut AllocExtra<'tcx>,
(alloc_id, prove_extra): (AllocId, Self::ProvenanceExtra), (alloc_id, prove_extra): (AllocId, Self::ProvenanceExtra),
range: AllocRange, size: Size,
_align: Align,
) -> InterpResult<'tcx> { ) -> InterpResult<'tcx> {
if machine.tracked_alloc_ids.contains(&alloc_id) { if machine.tracked_alloc_ids.contains(&alloc_id) {
machine.emit_diagnostic(NonHaltingDiagnostic::FreedAlloc(alloc_id)); machine.emit_diagnostic(NonHaltingDiagnostic::FreedAlloc(alloc_id));
} }
if let Some(data_race) = &mut alloc_extra.data_race { if let Some(data_race) = &mut alloc_extra.data_race {
data_race.deallocate(alloc_id, range, machine)?; data_race.deallocate(alloc_id, size, machine)?;
} }
if let Some(borrow_tracker) = &mut alloc_extra.borrow_tracker { if let Some(borrow_tracker) = &mut alloc_extra.borrow_tracker {
borrow_tracker.before_memory_deallocation(alloc_id, prove_extra, range, machine)?; borrow_tracker.before_memory_deallocation(alloc_id, prove_extra, size, machine)?;
} }
if let Some((_, deallocated_at)) = machine.allocation_spans.borrow_mut().get_mut(&alloc_id) if let Some((_, deallocated_at)) = machine.allocation_spans.borrow_mut().get_mut(&alloc_id)
{ {