@@ -1011,9 +1011,9 @@ impl<'ra> NameBindingData<'ra> {
10111011enum EpeBinding < ' ra > {
10121012 #[ default]
10131013 OptPending ,
1014- OptReadyOk ( NameBinding < ' ra > ) ,
1015- OptReadyErr ,
1016- Item ( NameBinding < ' ra > ) ,
1014+ OptReadyOk ( NameBinding < ' ra > , bool ) ,
1015+ OptReadyErr ( bool ) ,
1016+ Item ( NameBinding < ' ra > , bool ) ,
10171017}
10181018
10191019#[ derive( Default , Clone ) ]
@@ -2021,7 +2021,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
20212021 if used == Used :: Scope {
20222022 if let Some ( entry) = self . extern_prelude . get ( & ident. normalize_to_macros_2_0 ( ) ) {
20232023 if !entry. introduced_by_item
2024- && entry. binding . get ( ) == EpeBinding :: Item ( used_binding)
2024+ && matches ! ( entry. binding. get( ) , EpeBinding :: Item ( b , _ ) if b == used_binding)
20252025 {
20262026 return ;
20272027 }
@@ -2187,23 +2187,23 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
21872187 let norm_ident = ident. normalize_to_macros_2_0 ( ) ;
21882188 let entry = self . extern_prelude . get ( & norm_ident) . cloned ( ) ;
21892189 let binding = entry. map ( |entry| match entry. binding . get ( ) {
2190- EpeBinding :: Item ( binding) => {
2191- if finalize && entry. introduced_by_item {
2190+ EpeBinding :: Item ( binding, finalized ) => {
2191+ if finalize && !finalized && entry. introduced_by_item {
21922192 self . record_use ( ident, binding, Used :: Other ) ;
21932193 }
2194- EpeBinding :: Item ( binding)
2194+ EpeBinding :: Item ( binding, finalize )
21952195 }
2196- EpeBinding :: OptReadyOk ( binding) => {
2197- if finalize {
2196+ EpeBinding :: OptReadyOk ( binding, finalized ) => {
2197+ if finalize && !finalized {
21982198 self . cstore_mut ( ) . process_path_extern ( self . tcx , ident. name , ident. span ) ;
21992199 }
2200- EpeBinding :: OptReadyOk ( binding)
2200+ EpeBinding :: OptReadyOk ( binding, finalize )
22012201 }
2202- EpeBinding :: OptReadyErr => {
2203- if finalize {
2202+ EpeBinding :: OptReadyErr ( finalized ) => {
2203+ if finalize && !finalized {
22042204 self . cstore_mut ( ) . process_path_extern ( self . tcx , ident. name , ident. span ) ;
22052205 }
2206- EpeBinding :: OptReadyErr
2206+ EpeBinding :: OptReadyErr ( finalize )
22072207 }
22082208 EpeBinding :: OptPending => {
22092209 let crate_id = if finalize {
@@ -2213,19 +2213,19 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
22132213 } ;
22142214 let res = match crate_id {
22152215 Some ( crate_id) => Res :: Def ( DefKind :: Mod , crate_id. as_def_id ( ) ) ,
2216- None => return EpeBinding :: OptReadyErr ,
2216+ None => return EpeBinding :: OptReadyErr ( finalize ) ,
22172217 } ;
22182218 let binding = self . arenas . new_pub_res_binding ( res, DUMMY_SP , LocalExpnId :: ROOT ) ;
2219- EpeBinding :: OptReadyOk ( binding)
2219+ EpeBinding :: OptReadyOk ( binding, finalize )
22202220 }
22212221 } ) ;
22222222
22232223 binding. and_then ( |binding| {
22242224 self . extern_prelude [ & norm_ident] . binding . set ( binding) ;
22252225 match binding {
2226- EpeBinding :: Item ( binding) | EpeBinding :: OptReadyOk ( binding) => Some ( binding) ,
2227- EpeBinding :: OptReadyErr if finalize => Some ( self . dummy_binding ) ,
2228- EpeBinding :: OptReadyErr => None ,
2226+ EpeBinding :: Item ( binding, _ ) | EpeBinding :: OptReadyOk ( binding, _ ) => Some ( binding) ,
2227+ EpeBinding :: OptReadyErr ( _ ) if finalize => Some ( self . dummy_binding ) ,
2228+ EpeBinding :: OptReadyErr ( _ ) => None ,
22292229 EpeBinding :: OptPending => unreachable ! ( ) ,
22302230 }
22312231 } )
0 commit comments