@@ -30,7 +30,10 @@ use rustc_span::{BytePos, Span, SyntaxContext};
3030use thin_vec:: { thin_vec, ThinVec } ;
3131
3232use crate :: errors:: { AddedMacroUse , ChangeImportBinding , ChangeImportBindingSuggestion } ;
33- use crate :: errors:: { ConsiderAddingADerive , ExplicitUnsafeTraits , MaybeMissingMacroRulesName } ;
33+ use crate :: errors:: {
34+ ConsiderAddingADerive , ExplicitUnsafeTraits , MacroDefinedLater , MacroSuggMovePosition ,
35+ MaybeMissingMacroRulesName ,
36+ } ;
3437use crate :: imports:: { Import , ImportKind } ;
3538use crate :: late:: { PatternSource , Rib } ;
3639use crate :: { errors as errs, BindingKey } ;
@@ -1456,6 +1459,24 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
14561459 return ;
14571460 }
14581461
1462+ let unused_macro = self . unused_macros . iter ( ) . find_map ( |( def_id, ( _, unused_ident) ) | {
1463+ if unused_ident. name == ident. name {
1464+ Some ( ( def_id. clone ( ) , unused_ident. clone ( ) ) )
1465+ } else {
1466+ None
1467+ }
1468+ } ) ;
1469+
1470+ if let Some ( ( def_id, unused_ident) ) = unused_macro {
1471+ let scope = self . local_macro_def_scopes [ & def_id] ;
1472+ let parent_nearest = parent_scope. module . nearest_parent_mod ( ) ;
1473+ if Some ( parent_nearest) == scope. opt_def_id ( ) {
1474+ err. subdiagnostic ( self . dcx ( ) , MacroDefinedLater { span : unused_ident. span } ) ;
1475+ err. subdiagnostic ( self . dcx ( ) , MacroSuggMovePosition { span : ident. span , ident } ) ;
1476+ return ;
1477+ }
1478+ }
1479+
14591480 if self . macro_names . contains ( & ident. normalize_to_macros_2_0 ( ) ) {
14601481 err. subdiagnostic ( self . dcx ( ) , AddedMacroUse ) ;
14611482 return ;
0 commit comments