Skip to content

Commit 2754d4e

Browse files
committed
Add safety comments
1 parent e1aa45b commit 2754d4e

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

compiler/rustc_interface/src/passes.rs

+5
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ mod boxed_resolver {
123123
resolver: None,
124124
_pin: PhantomPinned,
125125
});
126+
// SAFETY: `make_resolver` takes a resolver arena with an arbitrary lifetime and
127+
// returns a resolver with the same lifetime as the arena. We ensure that the arena
128+
// outlives the resolver in the drop impl and elsewhere so these transmutes are sound.
126129
unsafe {
127130
let (crate_, resolver) = make_resolver(
128131
std::mem::transmute::<&Session, &Session>(&boxed_resolver.session),
@@ -137,6 +140,7 @@ mod boxed_resolver {
137140
}
138141

139142
pub fn access<F: for<'a> FnOnce(&mut Resolver<'a>) -> R, R>(&mut self, f: F) -> R {
143+
// SAFETY: The resolver doesn't need to be pinned.
140144
let mut resolver = unsafe {
141145
self.0.as_mut().map_unchecked_mut(|boxed_resolver| &mut boxed_resolver.resolver)
142146
};
@@ -147,6 +151,7 @@ mod boxed_resolver {
147151
match Rc::try_unwrap(resolver) {
148152
Ok(resolver) => {
149153
let mut resolver = resolver.into_inner();
154+
// SAFETY: The resolver doesn't need to be pinned.
150155
let mut resolver = unsafe {
151156
resolver
152157
.0

0 commit comments

Comments
 (0)