@@ -14,7 +14,7 @@ use std::sync::Arc;
1414use base;
1515use monomorphize:: Instance ;
1616use rustc:: hir:: def_id:: CrateNum ;
17- use rustc:: hir:: def_id:: { DefId , LOCAL_CRATE , INVALID_CRATE , CRATE_DEF_INDEX } ;
17+ use rustc:: hir:: def_id:: { DefId , LOCAL_CRATE } ;
1818use rustc:: middle:: exported_symbols:: SymbolExportLevel ;
1919use rustc:: session:: config;
2020use rustc:: ty:: TyCtxt ;
@@ -24,7 +24,7 @@ use rustc_allocator::ALLOCATOR_METHODS;
2424
2525pub type ExportedSymbols = FxHashMap <
2626 CrateNum ,
27- Arc < Vec < ( String , DefId , SymbolExportLevel ) > > ,
27+ Arc < Vec < ( String , Option < DefId > , SymbolExportLevel ) > > ,
2828> ;
2929
3030pub fn threshold ( tcx : TyCtxt ) -> SymbolExportLevel {
@@ -65,11 +65,13 @@ pub fn provide_local(providers: &mut Providers) {
6565 Rc :: new ( tcx. exported_symbols ( cnum)
6666 . iter ( )
6767 . filter_map ( |& ( _, id, level) | {
68- if level. is_below_threshold ( export_threshold) {
69- Some ( id)
70- } else {
71- None
72- }
68+ id. and_then ( |id| {
69+ if level. is_below_threshold ( export_threshold) {
70+ Some ( id)
71+ } else {
72+ None
73+ }
74+ } )
7375 } )
7476 . collect ( ) )
7577 } ;
@@ -95,25 +97,20 @@ pub fn provide_local(providers: &mut Providers) {
9597 let name = tcx. symbol_name ( Instance :: mono ( tcx, def_id) ) ;
9698 let export_level = export_level ( tcx, def_id) ;
9799 debug ! ( "EXPORTED SYMBOL (local): {} ({:?})" , name, export_level) ;
98- ( str:: to_owned ( & name) , def_id, export_level)
100+ ( str:: to_owned ( & name) , Some ( def_id) , export_level)
99101 } )
100102 . collect ( ) ;
101103
102- const INVALID_DEF_ID : DefId = DefId {
103- krate : INVALID_CRATE ,
104- index : CRATE_DEF_INDEX ,
105- } ;
106-
107104 if let Some ( _) = * tcx. sess . entry_fn . borrow ( ) {
108105 local_crate. push ( ( "main" . to_string ( ) ,
109- INVALID_DEF_ID ,
106+ None ,
110107 SymbolExportLevel :: C ) ) ;
111108 }
112109
113110 if tcx. sess . allocator_kind . get ( ) . is_some ( ) {
114111 for method in ALLOCATOR_METHODS {
115112 local_crate. push ( ( format ! ( "__rust_{}" , method. name) ,
116- INVALID_DEF_ID ,
113+ None ,
117114 SymbolExportLevel :: Rust ) ) ;
118115 }
119116 }
@@ -123,12 +120,12 @@ pub fn provide_local(providers: &mut Providers) {
123120 let idx = def_id. index ;
124121 let disambiguator = tcx. sess . local_crate_disambiguator ( ) ;
125122 let registrar = tcx. sess . generate_derive_registrar_symbol ( disambiguator, idx) ;
126- local_crate. push ( ( registrar, def_id, SymbolExportLevel :: C ) ) ;
123+ local_crate. push ( ( registrar, Some ( def_id) , SymbolExportLevel :: C ) ) ;
127124 }
128125
129126 if tcx. sess . crate_types . borrow ( ) . contains ( & config:: CrateTypeDylib ) {
130127 local_crate. push ( ( metadata_symbol_name ( tcx) ,
131- INVALID_DEF_ID ,
128+ None ,
132129 SymbolExportLevel :: Rust ) ) ;
133130 }
134131 Arc :: new ( local_crate)
@@ -178,7 +175,7 @@ pub fn provide_extern(providers: &mut Providers) {
178175 export_level ( tcx, def_id)
179176 } ;
180177 debug ! ( "EXPORTED SYMBOL (re-export): {} ({:?})" , name, export_level) ;
181- ( str:: to_owned ( & name) , def_id, export_level)
178+ ( str:: to_owned ( & name) , Some ( def_id) , export_level)
182179 } )
183180 . collect ( ) ;
184181
0 commit comments