@@ -422,6 +422,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
422422 // to detect potential ambiguities.
423423 let mut innermost_result: Option < ( NameBinding < ' _ > , Flags ) > = None ;
424424 let mut determinacy = Determinacy :: Determined ;
425+ let mut extern_prelude_item_binding = None ;
426+ let mut extern_prelude_flag_binding = None ;
425427 // Shadowed bindings don't need to be marked as used or non-speculatively loaded.
426428 macro finalize_scope ( ) {
427429 if innermost_result. is_none ( ) { finalize } else { None }
@@ -558,15 +560,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
558560 Scope :: ExternPreludeItems => {
559561 // FIXME: use `finalize_scope` here.
560562 match this. reborrow ( ) . extern_prelude_get_item ( ident, finalize. is_some ( ) ) {
561- Some ( binding) => Ok ( ( binding, Flags :: empty ( ) ) ) ,
563+ Some ( binding) => {
564+ extern_prelude_item_binding = Some ( binding) ;
565+ Ok ( ( binding, Flags :: empty ( ) ) )
566+ }
562567 None => Err ( Determinacy :: determined (
563568 this. graph_root . unexpanded_invocations . borrow ( ) . is_empty ( ) ,
564569 ) ) ,
565570 }
566571 }
567572 Scope :: ExternPreludeFlags => {
568573 match this. extern_prelude_get_flag ( ident, finalize_scope ! ( ) . is_some ( ) ) {
569- Some ( binding) => Ok ( ( binding, Flags :: empty ( ) ) ) ,
574+ Some ( binding) => {
575+ extern_prelude_flag_binding = Some ( binding) ;
576+ Ok ( ( binding, Flags :: empty ( ) ) )
577+ }
570578 None => Err ( Determinacy :: Determined ) ,
571579 }
572580 }
@@ -686,7 +694,16 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
686694 } else {
687695 None
688696 } ;
689- if let Some ( kind) = ambiguity_error_kind {
697+ // Skip ambiguity errors for extern flag bindings "overridden"
698+ // by extern item bindings.
699+ // FIXME: Remove with lang team approval.
700+ let issue_145575_hack = Some ( binding)
701+ == extern_prelude_flag_binding
702+ && extern_prelude_item_binding. is_some ( )
703+ && extern_prelude_item_binding != Some ( innermost_binding) ;
704+ if let Some ( kind) = ambiguity_error_kind
705+ && !issue_145575_hack
706+ {
690707 let misc = |f : Flags | {
691708 if f. contains ( Flags :: MISC_SUGGEST_CRATE ) {
692709 AmbiguityErrorMisc :: SuggestCrate
0 commit comments