about summary refs log tree commit diff
path: root/compiler/rustc_interface/src
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2021-06-09 14:51:42 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2021-06-09 14:51:42 +0200
commit2754d4e514157482dd2683640d7674634db2f89e (patch)
tree7641c66638b47f8589fad4dd7e5b09c4248655f7 /compiler/rustc_interface/src
parente1aa45b64d29ef03511c4fbd359ee42c6bb342ba (diff)
downloadrust-2754d4e514157482dd2683640d7674634db2f89e.tar.gz
rust-2754d4e514157482dd2683640d7674634db2f89e.zip
Add safety comments
Diffstat (limited to 'compiler/rustc_interface/src')
-rw-r--r--compiler/rustc_interface/src/passes.rs5
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/rustc_interface/src/passes.rs b/compiler/rustc_interface/src/passes.rs
index 6bd8fc9e5ee..30092a02cc3 100644
--- a/compiler/rustc_interface/src/passes.rs
+++ b/compiler/rustc_interface/src/passes.rs
@@ -123,6 +123,9 @@ mod boxed_resolver {
                 resolver: None,
                 _pin: PhantomPinned,
             });
+            // SAFETY: `make_resolver` takes a resolver arena with an arbitrary lifetime and
+            // returns a resolver with the same lifetime as the arena. We ensure that the arena
+            // outlives the resolver in the drop impl and elsewhere so these transmutes are sound.
             unsafe {
                 let (crate_, resolver) = make_resolver(
                     std::mem::transmute::<&Session, &Session>(&boxed_resolver.session),
@@ -137,6 +140,7 @@ mod boxed_resolver {
         }
 
         pub fn access<F: for<'a> FnOnce(&mut Resolver<'a>) -> R, R>(&mut self, f: F) -> R {
+            // SAFETY: The resolver doesn't need to be pinned.
             let mut resolver = unsafe {
                 self.0.as_mut().map_unchecked_mut(|boxed_resolver| &mut boxed_resolver.resolver)
             };
@@ -147,6 +151,7 @@ mod boxed_resolver {
             match Rc::try_unwrap(resolver) {
                 Ok(resolver) => {
                     let mut resolver = resolver.into_inner();
+                    // SAFETY: The resolver doesn't need to be pinned.
                     let mut resolver = unsafe {
                         resolver
                             .0