@@ -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