@@ -6,7 +6,6 @@ use super::{FnDeclKind, LoweringContext, ParamMode};
66use rustc_ast:: ptr:: P ;
77use rustc_ast:: visit:: AssocCtxt ;
88use rustc_ast:: * ;
9- use rustc_data_structures:: fx:: FxHashMap ;
109use rustc_data_structures:: sorted_map:: SortedMap ;
1110use rustc_hir as hir;
1211use rustc_hir:: def:: { DefKind , Res } ;
@@ -67,7 +66,7 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
6766 // HirId handling.
6867 bodies : Vec :: new ( ) ,
6968 attrs : SortedMap :: default ( ) ,
70- children : FxHashMap :: default ( ) ,
69+ children : Vec :: default ( ) ,
7170 current_hir_id_owner : hir:: CRATE_OWNER_ID ,
7271 item_local_id_counter : hir:: ItemLocalId :: new ( 0 ) ,
7372 node_id_to_local_id : Default :: default ( ) ,
@@ -95,7 +94,13 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
9594 for ( def_id, info) in lctx. children {
9695 self . owners . ensure_contains_elem ( def_id, || hir:: MaybeOwner :: Phantom ) ;
9796 debug_assert ! ( matches!( self . owners[ def_id] , hir:: MaybeOwner :: Phantom ) ) ;
98- self . owners [ def_id] = info;
97+ match ( self . owners [ def_id] , info) {
98+ ( hir:: MaybeOwner :: Phantom , _)
99+ | ( hir:: MaybeOwner :: NonOwner ( _) , hir:: MaybeOwner :: Owner ( _) ) => {
100+ self . owners [ def_id] = info;
101+ }
102+ _ => unreachable ! ( ) ,
103+ }
99104 }
100105 }
101106
@@ -534,12 +539,12 @@ impl<'hir> LoweringContext<'_, 'hir> {
534539 for new_node_id in [ id1, id2] {
535540 let new_id = self . local_def_id ( new_node_id) ;
536541 let Some ( res) = resolutions. next ( ) else {
542+ debug_assert ! ( self . children. iter( ) . find( |( id, _) | id == & new_id) . is_none( ) ) ;
537543 // Associate an HirId to both ids even if there is no resolution.
538- let _old = self . children . insert (
544+ self . children . push ( (
539545 new_id,
540- hir:: MaybeOwner :: NonOwner ( hir:: HirId :: make_owner ( new_id) ) ,
546+ hir:: MaybeOwner :: NonOwner ( hir:: HirId :: make_owner ( new_id) ) ) ,
541547 ) ;
542- debug_assert ! ( _old. is_none( ) ) ;
543548 continue ;
544549 } ;
545550 let ident = * ident;
0 commit comments