@@ -1031,7 +1031,7 @@ struct ExternPreludeEntry<'ra> {
10311031     /// `flag_binding` is `None`, or when `extern crate` introducing `item_binding` used renaming. 
10321032     item_binding :  Option < ( NameBinding < ' ra > ,  /* introduced by item */  bool ) > , 
10331033    /// Binding from an `--extern` flag, lazily populated on first use. 
1034-      flag_binding :  Option < Cell < PendingBinding < ' ra > > > , 
1034+      flag_binding :  Option < Cell < ( PendingBinding < ' ra > ,   /* finalized */   bool ) > > , 
10351035} 
10361036
10371037impl  ExternPreludeEntry < ' _ >  { 
@@ -1042,7 +1042,7 @@ impl ExternPreludeEntry<'_> {
10421042    fn  flag ( )  -> Self  { 
10431043        ExternPreludeEntry  { 
10441044            item_binding :  None , 
1045-             flag_binding :  Some ( Cell :: new ( PendingBinding :: Pending ) ) , 
1045+             flag_binding :  Some ( Cell :: new ( ( PendingBinding :: Pending ,   false ) ) ) , 
10461046        } 
10471047    } 
10481048} 
@@ -2245,14 +2245,16 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
22452245    fn  extern_prelude_get_flag ( & self ,  ident :  Ident ,  finalize :  bool )  -> Option < NameBinding < ' ra > >  { 
22462246        let  entry = self . extern_prelude . get ( & Macros20NormalizedIdent :: new ( ident) ) ; 
22472247        entry. and_then ( |entry| entry. flag_binding . as_ref ( ) ) . and_then ( |flag_binding| { 
2248-             let  binding = match  flag_binding. get ( )  { 
2248+             let  ( pending_binding,  finalized)  = flag_binding. get ( ) ; 
2249+             let  binding = match  pending_binding { 
22492250                PendingBinding :: Ready ( binding)  => { 
2250-                     if  finalize { 
2251+                     if  finalize && !finalized  { 
22512252                        self . cstore_mut ( ) . process_path_extern ( self . tcx ,  ident. name ,  ident. span ) ; 
22522253                    } 
22532254                    binding
22542255                } 
22552256                PendingBinding :: Pending  => { 
2257+                     debug_assert ! ( !finalized) ; 
22562258                    let  crate_id = if  finalize { 
22572259                        self . cstore_mut ( ) . process_path_extern ( self . tcx ,  ident. name ,  ident. span ) 
22582260                    }  else  { 
@@ -2264,7 +2266,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
22642266                    } ) 
22652267                } 
22662268            } ; 
2267-             flag_binding. set ( PendingBinding :: Ready ( binding) ) ; 
2269+             flag_binding. set ( ( PendingBinding :: Ready ( binding) ,  finalize || finalized ) ) ; 
22682270            binding. or_else ( || finalize. then_some ( self . dummy_binding ) ) 
22692271        } ) 
22702272    } 
0 commit comments