@@ -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,90 +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 , ' 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 , ' tcx > FnOnce (
102
- & ' tcx Session ,
103
- & ' a ResolverArenas < ' a > ,
104
- ) -> Resolver < ' a , ' tcx > ,
105
- ) -> BoxedResolver {
106
- let mut boxed_resolver = Box :: new ( BoxedResolverInner {
107
- session,
108
- resolver_arenas : Some ( Resolver :: arenas ( ) ) ,
109
- resolver : None ,
110
- _pin : PhantomPinned ,
111
- } ) ;
112
- // SAFETY: `make_resolver` takes a resolver arena with an arbitrary lifetime and
113
- // returns a resolver with the same lifetime as the arena. We ensure that the arena
114
- // outlives the resolver in the drop impl and elsewhere so these transmutes are sound.
115
- unsafe {
116
- let resolver = make_resolver (
117
- std:: mem:: transmute :: < & Session , & Session > ( & boxed_resolver. session ) ,
118
- std:: mem:: transmute :: < & ResolverArenas < ' _ > , & ResolverArenas < ' _ > > (
119
- boxed_resolver. resolver_arenas . as_ref ( ) . unwrap ( ) ,
120
- ) ,
121
- ) ;
122
- boxed_resolver. resolver = Some ( resolver) ;
123
- BoxedResolver ( Pin :: new_unchecked ( boxed_resolver) )
124
- }
125
- }
126
-
127
- pub fn access < F : for <' a , ' tcx > FnOnce ( & mut Resolver < ' a , ' tcx > ) -> R , R > (
128
- & mut self ,
129
- f : F ,
130
- ) -> R {
131
- // SAFETY: The resolver doesn't need to be pinned.
132
- let mut resolver = unsafe {
133
- self . 0 . as_mut ( ) . map_unchecked_mut ( |boxed_resolver| & mut boxed_resolver. resolver )
134
- } ;
135
- f ( ( & mut * resolver) . as_mut ( ) . unwrap ( ) )
136
- }
137
-
138
- pub fn into_outputs ( mut self ) -> ty:: ResolverOutputs {
139
- // SAFETY: The resolver doesn't need to be pinned.
140
- let mut resolver = unsafe {
141
- self . 0 . as_mut ( ) . map_unchecked_mut ( |boxed_resolver| & mut boxed_resolver. resolver )
142
- } ;
143
- resolver. take ( ) . unwrap ( ) . into_outputs ( )
144
- }
145
- }
146
- }
147
-
148
- pub fn create_resolver (
149
- sess : Lrc < Session > ,
150
- metadata_loader : Box < MetadataLoaderDyn > ,
151
- krate : & ast:: Crate ,
152
- crate_name : Symbol ,
153
- ) -> BoxedResolver {
154
- trace ! ( "create_resolver" ) ;
155
- BoxedResolver :: new ( sess, move |sess, resolver_arenas| {
156
- Resolver :: new ( sess, krate, crate_name, metadata_loader, resolver_arenas)
157
- } )
158
- }
159
-
160
74
pub fn register_plugins < ' a > (
161
75
sess : & ' a Session ,
162
76
metadata_loader : & ' a dyn MetadataLoader ,
0 commit comments