Skip to content

Commit e1aa45b

Browse files
committed
Use explicit drop impl
1 parent 2bf839e commit e1aa45b

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

compiler/rustc_interface/src/passes.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,22 @@ mod boxed_resolver {
9393

9494
pub struct BoxedResolver(Pin<Box<BoxedResolverInner>>);
9595

96-
// Note: Drop order is important to prevent dangling references. Resolver must be dropped first,
97-
// then resolver_arenas and finally session.
98-
// The drop order is defined to be from top to bottom in RFC1857, so there is no need for
99-
// ManuallyDrop for as long as the fields are not reordered.
10096
struct BoxedResolverInner {
101-
resolver: Option<Resolver<'static>>,
102-
resolver_arenas: ResolverArenas<'static>,
10397
session: Lrc<Session>,
98+
resolver_arenas: Option<ResolverArenas<'static>>,
99+
resolver: Option<Resolver<'static>>,
104100
_pin: PhantomPinned,
105101
}
106102

103+
// Note: Drop order is important to prevent dangling references. Resolver must be dropped first,
104+
// then resolver_arenas and finally session.
105+
impl Drop for BoxedResolverInner {
106+
fn drop(&mut self) {
107+
self.resolver.take();
108+
self.resolver_arenas.take();
109+
}
110+
}
111+
107112
impl BoxedResolver {
108113
pub(super) fn new<F>(session: Lrc<Session>, make_resolver: F) -> Result<(ast::Crate, Self)>
109114
where
@@ -114,15 +119,15 @@ mod boxed_resolver {
114119
{
115120
let mut boxed_resolver = Box::new(BoxedResolverInner {
116121
session,
117-
resolver_arenas: Resolver::arenas(),
122+
resolver_arenas: Some(Resolver::arenas()),
118123
resolver: None,
119124
_pin: PhantomPinned,
120125
});
121126
unsafe {
122127
let (crate_, resolver) = make_resolver(
123128
std::mem::transmute::<&Session, &Session>(&boxed_resolver.session),
124129
std::mem::transmute::<&ResolverArenas<'_>, &ResolverArenas<'_>>(
125-
&boxed_resolver.resolver_arenas,
130+
boxed_resolver.resolver_arenas.as_ref().unwrap(),
126131
),
127132
)?;
128133
boxed_resolver.resolver =

0 commit comments

Comments
 (0)