@@ -887,14 +887,24 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
887
887
// Since import resolution is finished, globs will not define any more names.
888
888
* module. globs . borrow_mut ( ) = Vec :: new ( ) ;
889
889
890
+ let report_already_exported = |this : & mut Self , ident, span, prev_span| {
891
+ let msg = format ! ( "a macro named `{}` has already been exported" , ident) ;
892
+ this. session . struct_span_err ( span, & msg)
893
+ . span_label ( span, format ! ( "`{}` already exported" , ident) )
894
+ . span_note ( prev_span, "previous macro export here" )
895
+ . emit ( ) ;
896
+ } ;
897
+
890
898
let mut reexports = Vec :: new ( ) ;
891
899
let mut exported_macro_names = FxHashMap ( ) ;
892
900
if module as * const _ == self . graph_root as * const _ {
893
901
let macro_exports = mem:: replace ( & mut self . macro_exports , Vec :: new ( ) ) ;
894
- for export in macro_exports. into_iter ( ) . rev ( ) {
895
- if exported_macro_names. insert ( export. ident . modern ( ) , export. span ) . is_none ( ) {
896
- reexports. push ( export) ;
902
+ for export in macro_exports. into_iter ( ) {
903
+ if let Some ( prev_span) = exported_macro_names. insert ( export. ident . modern ( ) ,
904
+ export. span ) {
905
+ report_already_exported ( self , export. ident , export. span , prev_span) ;
897
906
}
907
+ reexports. push ( export) ;
898
908
}
899
909
}
900
910
@@ -912,13 +922,8 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
912
922
self . cstore . export_macros_untracked ( def. def_id ( ) . krate ) ;
913
923
}
914
924
if let Def :: Macro ( ..) = def {
915
- if let Some ( & span) = exported_macro_names. get ( & ident. modern ( ) ) {
916
- let msg =
917
- format ! ( "a macro named `{}` has already been exported" , ident) ;
918
- self . session . struct_span_err ( span, & msg)
919
- . span_label ( span, format ! ( "`{}` already exported" , ident) )
920
- . span_note ( binding. span , "previous macro export here" )
921
- . emit ( ) ;
925
+ if let Some ( legacy_span) = exported_macro_names. get ( & ident. modern ( ) ) {
926
+ report_already_exported ( self , ident, * legacy_span, binding. span ) ;
922
927
}
923
928
}
924
929
reexports. push ( Export {
0 commit comments