From e1aa45b64d29ef03511c4fbd359ee42c6bb342ba Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Wed, 9 Jun 2021 14:47:01 +0200 Subject: Use explicit drop impl --- compiler/rustc_interface/src/passes.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'compiler/rustc_interface/src') diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs index 62abc5e6964..6bd8fc9e5ee 100644 --- a/compiler/rustc_interface/src/passes.rs +++ b/compiler/rustc_interface/src/passes.rs @@ -93,17 +93,22 @@ mod boxed_resolver { pub struct BoxedResolver(Pin>); - // Note: Drop order is important to prevent dangling references. Resolver must be dropped first, - // then resolver_arenas and finally session. - // The drop order is defined to be from top to bottom in RFC1857, so there is no need for - // ManuallyDrop for as long as the fields are not reordered. struct BoxedResolverInner { - resolver: Option>, - resolver_arenas: ResolverArenas<'static>, session: Lrc, + resolver_arenas: Option>, + resolver: Option>, _pin: PhantomPinned, } + // Note: Drop order is important to prevent dangling references. Resolver must be dropped first, + // then resolver_arenas and finally session. + impl Drop for BoxedResolverInner { + fn drop(&mut self) { + self.resolver.take(); + self.resolver_arenas.take(); + } + } + impl BoxedResolver { pub(super) fn new(session: Lrc, make_resolver: F) -> Result<(ast::Crate, Self)> where @@ -114,7 +119,7 @@ mod boxed_resolver { { let mut boxed_resolver = Box::new(BoxedResolverInner { session, - resolver_arenas: Resolver::arenas(), + resolver_arenas: Some(Resolver::arenas()), resolver: None, _pin: PhantomPinned, }); @@ -122,7 +127,7 @@ mod boxed_resolver { let (crate_, resolver) = make_resolver( std::mem::transmute::<&Session, &Session>(&boxed_resolver.session), std::mem::transmute::<&ResolverArenas<'_>, &ResolverArenas<'_>>( - &boxed_resolver.resolver_arenas, + boxed_resolver.resolver_arenas.as_ref().unwrap(), ), )?; boxed_resolver.resolver = -- cgit 1.4.1-3-g733a5