@@ -6,6 +6,7 @@ use rustc_hir::def::{DefKind, MacroKinds, Namespace, NonMacroAttrKind, PartialRe
66use rustc_middle:: { bug, span_bug} ;
77use rustc_session:: lint:: builtin:: PROC_MACRO_DERIVE_RESOLUTION_FALLBACK ;
88use rustc_session:: parse:: feature_err;
9+ use rustc_span:: edition:: Edition ;
910use rustc_span:: hygiene:: { ExpnId , ExpnKind , LocalExpnId , MacroKind , SyntaxContext } ;
1011use rustc_span:: { Ident , Span , kw, sym} ;
1112use tracing:: { debug, instrument} ;
@@ -15,10 +16,10 @@ use crate::imports::{Import, NameResolution};
1516use crate :: late:: { ConstantHasGenerics , NoConstantGenericsReason , PathSource , Rib , RibKind } ;
1617use crate :: macros:: { MacroRulesScope , sub_namespace_match} ;
1718use crate :: {
18- AmbiguityError , AmbiguityErrorMisc , AmbiguityKind , BindingKey , CmResolver , Determinacy ,
19- Finalize , ImportKind , LexicalScopeBinding , Module , ModuleKind , ModuleOrUniformRoot ,
20- NameBinding , NameBindingKind , ParentScope , PathResult , PrivacyError , Res , ResolutionError ,
21- Resolver , Scope , ScopeSet , Segment , Stage , Used , Weak , errors,
19+ AmbiguityError , AmbiguityErrorMisc , AmbiguityKind , AmbiguityWarning , BindingKey , CmResolver ,
20+ Determinacy , Finalize , ImportKind , LexicalScopeBinding , Module , ModuleKind ,
21+ ModuleOrUniformRoot , NameBinding , NameBindingKind , ParentScope , PathResult , PrivacyError , Res ,
22+ ResolutionError , Resolver , Scope , ScopeSet , Segment , Stage , Used , Weak , errors,
2223} ;
2324
2425#[ derive( Copy , Clone ) ]
@@ -704,13 +705,29 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
704705 // Skip ambiguity errors for extern flag bindings "overridden"
705706 // by extern item bindings.
706707 // FIXME: Remove with lang team approval.
707- let issue_145575_hack = Some ( binding)
708- == extern_prelude_flag_binding
709- && extern_prelude_item_binding. is_some ( )
710- && extern_prelude_item_binding != Some ( innermost_binding) ;
708+ let is_issue_145575_hack = || {
709+ Some ( binding) == extern_prelude_flag_binding
710+ && extern_prelude_item_binding. is_some ( )
711+ && extern_prelude_item_binding != Some ( innermost_binding)
712+ } ;
713+
711714 if let Some ( kind) = ambiguity_error_kind
712- && !issue_145575_hack
715+ && !is_issue_145575_hack ( )
713716 {
717+ // Turn ambiguity errors for core vs std panic into warnings.
718+ // FIXME: Remove with lang team approval.
719+ let is_issue_147319_hack = ctxt. edition ( )
720+ <= Edition :: Edition2024
721+ && matches ! ( orig_ident. name, sym:: panic)
722+ && this. is_builtin_macro ( binding. res ( ) )
723+ && this. is_builtin_macro ( innermost_binding. res ( ) ) ;
724+
725+ let warning = if is_issue_147319_hack {
726+ Some ( AmbiguityWarning :: PanicImport )
727+ } else {
728+ None
729+ } ;
730+
714731 let misc = |f : Flags | {
715732 if f. contains ( Flags :: MISC_SUGGEST_CRATE ) {
716733 AmbiguityErrorMisc :: SuggestCrate
@@ -727,7 +744,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
727744 ident : orig_ident,
728745 b1 : innermost_binding,
729746 b2 : binding,
730- warning : false ,
747+ warning,
731748 misc1 : misc ( innermost_flags) ,
732749 misc2 : misc ( flags) ,
733750 } ) ;
@@ -1071,7 +1088,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
10711088 ident,
10721089 b1 : binding,
10731090 b2 : shadowed_glob,
1074- warning : false ,
1091+ warning : None ,
10751092 misc1 : AmbiguityErrorMisc :: None ,
10761093 misc2 : AmbiguityErrorMisc :: None ,
10771094 } ) ;
0 commit comments