diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2021-06-09 14:51:42 +0200 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2021-06-09 14:51:42 +0200 |
| commit | 2754d4e514157482dd2683640d7674634db2f89e (patch) | |
| tree | 7641c66638b47f8589fad4dd7e5b09c4248655f7 /compiler/rustc_interface/src | |
| parent | e1aa45b64d29ef03511c4fbd359ee42c6bb342ba (diff) | |
| download | rust-2754d4e514157482dd2683640d7674634db2f89e.tar.gz rust-2754d4e514157482dd2683640d7674634db2f89e.zip | |
Add safety comments
Diffstat (limited to 'compiler/rustc_interface/src')
| -rw-r--r-- | compiler/rustc_interface/src/passes.rs | 5 |
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 |
