@@ -9,7 +9,7 @@ use rustc_hir::Node;
9
9
use rustc_index:: vec:: IndexVec ;
10
10
use rustc_middle:: middle:: codegen_fn_attrs:: CodegenFnAttrFlags ;
11
11
use rustc_middle:: middle:: exported_symbols:: {
12
- metadata_symbol_name, ExportedSymbol , SymbolExportInfo , SymbolExportLevel ,
12
+ metadata_symbol_name, ExportedSymbol , SymbolExportInfo , SymbolExportKind , SymbolExportLevel ,
13
13
} ;
14
14
use rustc_middle:: ty:: query:: { ExternProviders , Providers } ;
15
15
use rustc_middle:: ty:: subst:: { GenericArgKind , SubstsRef } ;
@@ -124,21 +124,37 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, cnum: CrateNum) -> DefIdMap<
124
124
} else {
125
125
symbol_export_level ( tcx, def_id. to_def_id ( ) )
126
126
} ;
127
+ let codegen_attrs = tcx. codegen_fn_attrs ( def_id. to_def_id ( ) ) ;
127
128
debug ! (
128
129
"EXPORTED SYMBOL (local): {} ({:?})" ,
129
130
tcx. symbol_name( Instance :: mono( tcx, def_id. to_def_id( ) ) ) ,
130
131
export_level
131
132
) ;
132
133
( def_id. to_def_id ( ) , SymbolExportInfo {
133
134
level : export_level,
135
+ kind : if tcx. is_static ( def_id. to_def_id ( ) ) {
136
+ if codegen_attrs. flags . contains ( CodegenFnAttrFlags :: THREAD_LOCAL ) {
137
+ SymbolExportKind :: Tls
138
+ } else {
139
+ SymbolExportKind :: Data
140
+ }
141
+ } else {
142
+ SymbolExportKind :: Text
143
+ } ,
144
+ used : codegen_attrs. flags . contains ( CodegenFnAttrFlags :: USED )
145
+ || codegen_attrs. flags . contains ( CodegenFnAttrFlags :: USED_LINKER ) ,
134
146
} )
135
147
} )
136
148
. collect ( ) ;
137
149
138
150
if let Some ( id) = tcx. proc_macro_decls_static ( ( ) ) {
139
151
reachable_non_generics. insert (
140
152
id. to_def_id ( ) ,
141
- SymbolExportInfo { level : SymbolExportLevel :: C } ,
153
+ SymbolExportInfo {
154
+ level : SymbolExportLevel :: C ,
155
+ kind : SymbolExportKind :: Data ,
156
+ used : false ,
157
+ } ,
142
158
) ;
143
159
}
144
160
@@ -180,7 +196,11 @@ fn exported_symbols_provider_local<'tcx>(
180
196
181
197
symbols. push ( (
182
198
exported_symbol,
183
- SymbolExportInfo { level : SymbolExportLevel :: C } ,
199
+ SymbolExportInfo {
200
+ level : SymbolExportLevel :: C ,
201
+ kind : SymbolExportKind :: Text ,
202
+ used : false ,
203
+ } ,
184
204
) ) ;
185
205
}
186
206
@@ -191,7 +211,11 @@ fn exported_symbols_provider_local<'tcx>(
191
211
192
212
symbols. push ( (
193
213
exported_symbol,
194
- SymbolExportInfo { level : SymbolExportLevel :: Rust } ,
214
+ SymbolExportInfo {
215
+ level : SymbolExportLevel :: Rust ,
216
+ kind : SymbolExportKind :: Text ,
217
+ used : false ,
218
+ } ,
195
219
) ) ;
196
220
}
197
221
}
@@ -207,7 +231,11 @@ fn exported_symbols_provider_local<'tcx>(
207
231
let exported_symbol = ExportedSymbol :: NoDefId ( SymbolName :: new ( tcx, sym) ) ;
208
232
(
209
233
exported_symbol,
210
- SymbolExportInfo { level : SymbolExportLevel :: C } ,
234
+ SymbolExportInfo {
235
+ level : SymbolExportLevel :: C ,
236
+ kind : SymbolExportKind :: Data ,
237
+ used : false ,
238
+ } ,
211
239
)
212
240
} ) ) ;
213
241
}
@@ -220,7 +248,11 @@ fn exported_symbols_provider_local<'tcx>(
220
248
let exported_symbol = ExportedSymbol :: NoDefId ( SymbolName :: new ( tcx, sym) ) ;
221
249
(
222
250
exported_symbol,
223
- SymbolExportInfo { level : SymbolExportLevel :: C } ,
251
+ SymbolExportInfo {
252
+ level : SymbolExportLevel :: C ,
253
+ kind : SymbolExportKind :: Data ,
254
+ used : false ,
255
+ } ,
224
256
)
225
257
} ) ) ;
226
258
}
@@ -231,7 +263,11 @@ fn exported_symbols_provider_local<'tcx>(
231
263
232
264
symbols. push ( (
233
265
exported_symbol,
234
- SymbolExportInfo { level : SymbolExportLevel :: Rust } ,
266
+ SymbolExportInfo {
267
+ level : SymbolExportLevel :: Rust ,
268
+ kind : SymbolExportKind :: Data ,
269
+ used : false ,
270
+ } ,
235
271
) ) ;
236
272
}
237
273
@@ -269,6 +305,8 @@ fn exported_symbols_provider_local<'tcx>(
269
305
symbol,
270
306
SymbolExportInfo {
271
307
level : SymbolExportLevel :: Rust ,
308
+ kind : SymbolExportKind :: Text ,
309
+ used : false ,
272
310
} ,
273
311
) ) ;
274
312
}
@@ -283,6 +321,8 @@ fn exported_symbols_provider_local<'tcx>(
283
321
ExportedSymbol :: DropGlue ( ty) ,
284
322
SymbolExportInfo {
285
323
level : SymbolExportLevel :: Rust ,
324
+ kind : SymbolExportKind :: Text ,
325
+ used : false ,
286
326
} ,
287
327
) ) ;
288
328
}
0 commit comments