@@ -23,9 +23,9 @@ use rustc_parse::{parse_crate_from_file, parse_crate_from_source_str, validate_a
23
23
use rustc_passes:: { self , hir_stats, layout_test} ;
24
24
use rustc_plugin_impl as plugin;
25
25
use rustc_query_impl:: { OnDiskCache , Queries as TcxQueries } ;
26
- use rustc_resolve:: { Resolver , ResolverArenas } ;
26
+ use rustc_resolve:: Resolver ;
27
27
use rustc_session:: config:: { CrateType , Input , OutputFilenames , OutputType } ;
28
- use rustc_session:: cstore:: { CrateStoreDyn , MetadataLoader , MetadataLoaderDyn , Untracked } ;
28
+ use rustc_session:: cstore:: { CrateStoreDyn , MetadataLoader , Untracked } ;
29
29
use rustc_session:: output:: filename_for_input;
30
30
use rustc_session:: search_paths:: PathKind ;
31
31
use rustc_session:: { Limit , Session } ;
@@ -37,9 +37,7 @@ use rustc_trait_selection::traits;
37
37
use std:: any:: Any ;
38
38
use std:: ffi:: OsString ;
39
39
use std:: io:: { self , BufWriter , Write } ;
40
- use std:: marker:: PhantomPinned ;
41
40
use std:: path:: { Path , PathBuf } ;
42
- use std:: pin:: Pin ;
43
41
use std:: sync:: { Arc , LazyLock } ;
44
42
use std:: { env, fs, iter} ;
45
43
@@ -73,84 +71,6 @@ fn count_nodes(krate: &ast::Crate) -> usize {
73
71
counter. count
74
72
}
75
73
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
-
154
74
pub fn register_plugins < ' a > (
155
75
sess : & ' a Session ,
156
76
metadata_loader : & ' a dyn MetadataLoader ,
@@ -256,7 +176,7 @@ pub fn configure_and_expand(
256
176
lint_store : & LintStore ,
257
177
mut krate : ast:: Crate ,
258
178
crate_name : Symbol ,
259
- resolver : & mut Resolver < ' _ > ,
179
+ resolver : & mut Resolver < ' _ , ' _ > ,
260
180
) -> Result < ast:: Crate > {
261
181
trace ! ( "configure_and_expand" ) ;
262
182
pre_expansion_lint ( sess, lint_store, resolver. registered_tools ( ) , & krate, crate_name) ;
0 commit comments