@@ -23,9 +23,9 @@ use rustc_parse::{parse_crate_from_file, parse_crate_from_source_str, validate_a
2323use rustc_passes:: { self , hir_stats, layout_test} ;
2424use rustc_plugin_impl as plugin;
2525use rustc_query_impl:: { OnDiskCache , Queries as TcxQueries } ;
26- use rustc_resolve:: { Resolver , ResolverArenas } ;
26+ use rustc_resolve:: Resolver ;
2727use rustc_session:: config:: { CrateType , Input , OutputFilenames , OutputType } ;
28- use rustc_session:: cstore:: { CrateStoreDyn , MetadataLoader , MetadataLoaderDyn , Untracked } ;
28+ use rustc_session:: cstore:: { CrateStoreDyn , MetadataLoader , Untracked } ;
2929use rustc_session:: output:: filename_for_input;
3030use rustc_session:: search_paths:: PathKind ;
3131use rustc_session:: { Limit , Session } ;
@@ -37,9 +37,7 @@ use rustc_trait_selection::traits;
3737use std:: any:: Any ;
3838use std:: ffi:: OsString ;
3939use std:: io:: { self , BufWriter , Write } ;
40- use std:: marker:: PhantomPinned ;
4140use std:: path:: { Path , PathBuf } ;
42- use std:: pin:: Pin ;
4341use std:: sync:: { Arc , LazyLock } ;
4442use std:: { env, fs, iter} ;
4543
@@ -73,84 +71,6 @@ fn count_nodes(krate: &ast::Crate) -> usize {
7371 counter. count
7472}
7573
76- pub use boxed_resolver:: BoxedResolver ;
77- mod boxed_resolver {
78- use super :: * ;
79-
80- pub struct BoxedResolver ( Pin < Box < BoxedResolverInner > > ) ;
81-
82- struct BoxedResolverInner {
83- session : Lrc < Session > ,
84- resolver_arenas : Option < ResolverArenas < ' static > > ,
85- resolver : Option < Resolver < ' static > > ,
86- _pin : PhantomPinned ,
87- }
88-
89- // Note: Drop order is important to prevent dangling references. Resolver must be dropped first,
90- // then resolver_arenas and session.
91- impl Drop for BoxedResolverInner {
92- fn drop ( & mut self ) {
93- self . resolver . take ( ) ;
94- self . resolver_arenas . take ( ) ;
95- }
96- }
97-
98- impl BoxedResolver {
99- pub ( super ) fn new (
100- session : Lrc < Session > ,
101- make_resolver : impl for < ' a > FnOnce ( & ' a Session , & ' a ResolverArenas < ' a > ) -> Resolver < ' a > ,
102- ) -> BoxedResolver {
103- let mut boxed_resolver = Box :: new ( BoxedResolverInner {
104- session,
105- resolver_arenas : Some ( Resolver :: arenas ( ) ) ,
106- resolver : None ,
107- _pin : PhantomPinned ,
108- } ) ;
109- // SAFETY: `make_resolver` takes a resolver arena with an arbitrary lifetime and
110- // returns a resolver with the same lifetime as the arena. We ensure that the arena
111- // outlives the resolver in the drop impl and elsewhere so these transmutes are sound.
112- unsafe {
113- let resolver = make_resolver (
114- std:: mem:: transmute :: < & Session , & Session > ( & boxed_resolver. session ) ,
115- std:: mem:: transmute :: < & ResolverArenas < ' _ > , & ResolverArenas < ' _ > > (
116- boxed_resolver. resolver_arenas . as_ref ( ) . unwrap ( ) ,
117- ) ,
118- ) ;
119- boxed_resolver. resolver = Some ( resolver) ;
120- BoxedResolver ( Pin :: new_unchecked ( boxed_resolver) )
121- }
122- }
123-
124- pub fn access < F : for < ' a > FnOnce ( & mut Resolver < ' a > ) -> R , R > ( & mut self , f : F ) -> R {
125- // SAFETY: The resolver doesn't need to be pinned.
126- let mut resolver = unsafe {
127- self . 0 . as_mut ( ) . map_unchecked_mut ( |boxed_resolver| & mut boxed_resolver. resolver )
128- } ;
129- f ( ( & mut * resolver) . as_mut ( ) . unwrap ( ) )
130- }
131-
132- pub fn into_outputs ( mut self ) -> ty:: ResolverOutputs {
133- // SAFETY: The resolver doesn't need to be pinned.
134- let mut resolver = unsafe {
135- self . 0 . as_mut ( ) . map_unchecked_mut ( |boxed_resolver| & mut boxed_resolver. resolver )
136- } ;
137- resolver. take ( ) . unwrap ( ) . into_outputs ( )
138- }
139- }
140- }
141-
142- pub fn create_resolver (
143- sess : Lrc < Session > ,
144- metadata_loader : Box < MetadataLoaderDyn > ,
145- krate : & ast:: Crate ,
146- crate_name : Symbol ,
147- ) -> BoxedResolver {
148- trace ! ( "create_resolver" ) ;
149- BoxedResolver :: new ( sess, move |sess, resolver_arenas| {
150- Resolver :: new ( sess, krate, crate_name, metadata_loader, resolver_arenas)
151- } )
152- }
153-
15474pub fn register_plugins < ' a > (
15575 sess : & ' a Session ,
15676 metadata_loader : & ' a dyn MetadataLoader ,
@@ -256,7 +176,7 @@ pub fn configure_and_expand(
256176 lint_store : & LintStore ,
257177 mut krate : ast:: Crate ,
258178 crate_name : Symbol ,
259- resolver : & mut Resolver < ' _ > ,
179+ resolver : & mut Resolver < ' _ , ' _ > ,
260180) -> Result < ast:: Crate > {
261181 trace ! ( "configure_and_expand" ) ;
262182 pre_expansion_lint ( sess, lint_store, resolver. registered_tools ( ) , & krate, crate_name) ;
0 commit comments