22// closely. The idea is that all reachable symbols are live, codes called
33// from live codes are live, and everything else is dead.
44
5+ use hir:: def_id:: { LocalDefIdMap , LocalDefIdSet } ;
56use itertools:: Itertools ;
6- use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
77use rustc_errors:: MultiSpan ;
88use rustc_hir as hir;
99use rustc_hir:: def:: { CtorOf , DefKind , Res } ;
@@ -45,17 +45,17 @@ struct MarkSymbolVisitor<'tcx> {
4545 worklist : Vec < LocalDefId > ,
4646 tcx : TyCtxt < ' tcx > ,
4747 maybe_typeck_results : Option < & ' tcx ty:: TypeckResults < ' tcx > > ,
48- live_symbols : FxHashSet < LocalDefId > ,
48+ live_symbols : LocalDefIdSet ,
4949 repr_has_repr_c : bool ,
5050 repr_has_repr_simd : bool ,
5151 in_pat : bool ,
5252 ignore_variant_stack : Vec < DefId > ,
5353 // maps from tuple struct constructors to tuple struct items
54- struct_constructors : FxHashMap < LocalDefId , LocalDefId > ,
54+ struct_constructors : LocalDefIdMap < LocalDefId > ,
5555 // maps from ADTs to ignored derived traits (e.g. Debug and Clone)
5656 // and the span of their respective impl (i.e., part of the derive
5757 // macro)
58- ignored_derived_traits : FxHashMap < LocalDefId , Vec < ( DefId , DefId ) > > ,
58+ ignored_derived_traits : LocalDefIdMap < Vec < ( DefId , DefId ) > > ,
5959}
6060
6161impl < ' tcx > MarkSymbolVisitor < ' tcx > {
@@ -237,7 +237,7 @@ impl<'tcx> MarkSymbolVisitor<'tcx> {
237237 }
238238
239239 fn mark_live_symbols ( & mut self ) {
240- let mut scanned = FxHashSet :: default ( ) ;
240+ let mut scanned = LocalDefIdSet :: default ( ) ;
241241 while let Some ( id) = self . worklist . pop ( ) {
242242 if !scanned. insert ( id) {
243243 continue ;
@@ -371,7 +371,7 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
371371 }
372372 if tcx. visibility ( def_id) . is_public ( ) { Some ( def_id) } else { None }
373373 } ) ;
374- self . live_symbols . extend ( live_fields) ;
374+ Extend :: extend ( & mut self . live_symbols , live_fields) ;
375375
376376 intravisit:: walk_struct_def ( self , def) ;
377377 }
@@ -506,7 +506,7 @@ fn has_allow_dead_code_or_lang_attr(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool
506506fn check_item < ' tcx > (
507507 tcx : TyCtxt < ' tcx > ,
508508 worklist : & mut Vec < LocalDefId > ,
509- struct_constructors : & mut FxHashMap < LocalDefId , LocalDefId > ,
509+ struct_constructors : & mut LocalDefIdMap < LocalDefId > ,
510510 id : hir:: ItemId ,
511511) {
512512 let allow_dead_code = has_allow_dead_code_or_lang_attr ( tcx, id. owner_id . def_id ) ;
@@ -583,9 +583,7 @@ fn check_foreign_item(tcx: TyCtxt<'_>, worklist: &mut Vec<LocalDefId>, id: hir::
583583 }
584584}
585585
586- fn create_and_seed_worklist (
587- tcx : TyCtxt < ' _ > ,
588- ) -> ( Vec < LocalDefId > , FxHashMap < LocalDefId , LocalDefId > ) {
586+ fn create_and_seed_worklist ( tcx : TyCtxt < ' _ > ) -> ( Vec < LocalDefId > , LocalDefIdMap < LocalDefId > ) {
589587 let effective_visibilities = & tcx. effective_visibilities ( ( ) ) ;
590588 // see `MarkSymbolVisitor::struct_constructors`
591589 let mut struct_constructors = Default :: default ( ) ;
@@ -617,7 +615,7 @@ fn create_and_seed_worklist(
617615fn live_symbols_and_ignored_derived_traits (
618616 tcx : TyCtxt < ' _ > ,
619617 ( ) : ( ) ,
620- ) -> ( FxHashSet < LocalDefId > , FxHashMap < LocalDefId , Vec < ( DefId , DefId ) > > ) {
618+ ) -> ( LocalDefIdSet , LocalDefIdMap < Vec < ( DefId , DefId ) > > ) {
621619 let ( worklist, struct_constructors) = create_and_seed_worklist ( tcx) ;
622620 let mut symbol_visitor = MarkSymbolVisitor {
623621 worklist,
@@ -629,7 +627,7 @@ fn live_symbols_and_ignored_derived_traits(
629627 in_pat : false ,
630628 ignore_variant_stack : vec ! [ ] ,
631629 struct_constructors,
632- ignored_derived_traits : FxHashMap :: default ( ) ,
630+ ignored_derived_traits : Default :: default ( ) ,
633631 } ;
634632 symbol_visitor. mark_live_symbols ( ) ;
635633 ( symbol_visitor. live_symbols , symbol_visitor. ignored_derived_traits )
@@ -643,8 +641,8 @@ struct DeadVariant {
643641
644642struct DeadVisitor < ' tcx > {
645643 tcx : TyCtxt < ' tcx > ,
646- live_symbols : & ' tcx FxHashSet < LocalDefId > ,
647- ignored_derived_traits : & ' tcx FxHashMap < LocalDefId , Vec < ( DefId , DefId ) > > ,
644+ live_symbols : & ' tcx LocalDefIdSet ,
645+ ignored_derived_traits : & ' tcx LocalDefIdMap < Vec < ( DefId , DefId ) > > ,
648646}
649647
650648enum ShouldWarnAboutField {
0 commit comments