interpret: pass Size and Align to before_memory_deallocation
This commit is contained in:
parent
79d246112d
commit
16e869a678
@ -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(())
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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(())
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user