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 {