about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOzaren <krishna.sd.2012@gmail.com>2020-04-09 14:48:06 -0400
committerOzaren <krishna.sd.2012@gmail.com>2020-04-10 13:17:55 -0400
commit7de9511d25e31fbb8a42d82738016ec1645b898b (patch)
tree47a88df2c22a88f07a714414dfd124f4c325f6f3
parent93dc97a85381cc52eb872d27e50e4d518926a27c (diff)
downloadrust-7de9511d25e31fbb8a42d82738016ec1645b898b.tar.gz
rust-7de9511d25e31fbb8a42d82738016ec1645b898b.zip
added machine hooks to track deallocations
-rw-r--r--src/librustc_mir/interpret/machine.rs8
-rw-r--r--src/librustc_mir/interpret/memory.rs2
2 files changed, 10 insertions, 0 deletions
diff --git a/src/librustc_mir/interpret/machine.rs b/src/librustc_mir/interpret/machine.rs
index 23e39f433f5..fd67b088c93 100644
--- a/src/librustc_mir/interpret/machine.rs
+++ b/src/librustc_mir/interpret/machine.rs
@@ -254,6 +254,14 @@ pub trait Machine<'mir, 'tcx>: Sized {
         kind: Option<MemoryKind<Self::MemoryKind>>,
     ) -> (Cow<'b, Allocation<Self::PointerTag, Self::AllocExtra>>, Self::PointerTag);
 
+    /// Called to notify the machine before a deallocation occurs.
+    fn before_deallocation(
+        _memory_extra: &mut Self::MemoryExtra,
+        _id: AllocId,
+    ) -> InterpResult<'tcx> {
+        Ok(())
+    }
+
     /// Return the "base" tag for the given *global* allocation: the one that is used for direct
     /// accesses to this static/const/fn allocation. If `id` is not a global allocation,
     /// this will return an unusable tag (i.e., accesses will be UB)!
diff --git a/src/librustc_mir/interpret/memory.rs b/src/librustc_mir/interpret/memory.rs
index c16c59715e4..539537e9de8 100644
--- a/src/librustc_mir/interpret/memory.rs
+++ b/src/librustc_mir/interpret/memory.rs
@@ -254,6 +254,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
             );
         }
 
+        M::before_deallocation(&mut self.extra, ptr.alloc_id)?;
+
         let (alloc_kind, mut alloc) = match self.alloc_map.remove(&ptr.alloc_id) {
             Some(alloc) => alloc,
             None => {