From 1754dcd145cdd67b9db1a554f6294e51aad20e46 Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Thu, 22 Aug 2019 19:42:40 +0300 Subject: [PATCH] proc_macro: check non-interned handles for "leaks" between/after invocations. --- src/libproc_macro/bridge/handle.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/libproc_macro/bridge/handle.rs b/src/libproc_macro/bridge/handle.rs index 66496ff3f1ad8..0297a3afe02c9 100644 --- a/src/libproc_macro/bridge/handle.rs +++ b/src/libproc_macro/bridge/handle.rs @@ -26,6 +26,12 @@ impl OwnedStore { } } +impl Drop for OwnedStore { + fn drop(&mut self) { + assert!(self.data.is_empty(), "{} `proc_macro` handles were leaked", self.data.len()); + } +} + impl OwnedStore { pub(super) fn alloc(&mut self, x: T) -> Handle { let counter = self.counter.fetch_add(1, Ordering::SeqCst); @@ -63,6 +69,13 @@ pub(super) struct InternedStore { interner: HashMap, } +impl Drop for InternedStore { + fn drop(&mut self) { + // HACK(eddyb) turn off the leak-checking for interned handles. + self.owned.data.clear(); + } +} + impl InternedStore { pub(super) fn new(counter: &'static AtomicUsize) -> Self { InternedStore {