This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 1 file changed +5
-0
lines changed
compiler/rustc_interface/src Expand file tree Collapse file tree 1 file changed +5
-0
lines changed Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments