diff options
| author | Ozaren <krishna.sd.2012@gmail.com> | 2020-04-09 14:48:06 -0400 |
|---|---|---|
| committer | Ozaren <krishna.sd.2012@gmail.com> | 2020-04-10 13:17:55 -0400 |
| commit | 7de9511d25e31fbb8a42d82738016ec1645b898b (patch) | |
| tree | 47a88df2c22a88f07a714414dfd124f4c325f6f3 | |
| parent | 93dc97a85381cc52eb872d27e50e4d518926a27c (diff) | |
| download | rust-7de9511d25e31fbb8a42d82738016ec1645b898b.tar.gz rust-7de9511d25e31fbb8a42d82738016ec1645b898b.zip | |
added machine hooks to track deallocations
| -rw-r--r-- | src/librustc_mir/interpret/machine.rs | 8 | ||||
| -rw-r--r-- | src/librustc_mir/interpret/memory.rs | 2 |
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 => { |
