@@ -422,6 +422,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
422
422
// to detect potential ambiguities.
423
423
let mut innermost_result: Option < ( NameBinding < ' _ > , Flags ) > = None ;
424
424
let mut determinacy = Determinacy :: Determined ;
425
+ let mut extern_prelude_item_binding = None ;
426
+ let mut extern_prelude_flag_binding = None ;
425
427
// Shadowed bindings don't need to be marked as used or non-speculatively loaded.
426
428
macro finalize_scope ( ) {
427
429
if innermost_result. is_none ( ) { finalize } else { None }
@@ -558,15 +560,21 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
558
560
Scope :: ExternPreludeItems => {
559
561
// FIXME: use `finalize_scope` here.
560
562
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
+ }
562
567
None => Err ( Determinacy :: determined (
563
568
this. graph_root . unexpanded_invocations . borrow ( ) . is_empty ( ) ,
564
569
) ) ,
565
570
}
566
571
}
567
572
Scope :: ExternPreludeFlags => {
568
573
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
+ }
570
578
None => Err ( Determinacy :: Determined ) ,
571
579
}
572
580
}
@@ -686,7 +694,16 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
686
694
} else {
687
695
None
688
696
} ;
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
+ {
690
707
let misc = |f : Flags | {
691
708
if f. contains ( Flags :: MISC_SUGGEST_CRATE ) {
692
709
AmbiguityErrorMisc :: SuggestCrate
0 commit comments