@@ -509,44 +509,28 @@ impl EmbargoVisitor<'tcx> {
509509 }
510510
511511 fn update_macro_reachable_mod ( & mut self , reachable_mod : hir:: HirId , defining_mod : DefId ) {
512- let set_vis = |this : & mut Self , hir_id : hir:: HirId | {
513- let item_def_id = this. tcx . hir ( ) . local_def_id ( hir_id) ;
514- if let Some ( def_kind) = this. tcx . def_kind ( item_def_id) {
515- let item = this. tcx . hir ( ) . expect_item ( hir_id) ;
516- let vis = ty:: Visibility :: from_hir ( & item. vis , hir_id, this. tcx ) ;
517- this. update_macro_reachable_def ( hir_id, def_kind, vis, defining_mod) ;
518- }
519- } ;
520-
521512 let module_def_id = self . tcx . hir ( ) . local_def_id ( reachable_mod) ;
522- if let Some ( ( module, _, _) ) = self . tcx . hir ( ) . get_if_module ( module_def_id) {
523- for item_id in & module. item_ids {
524- let hir_id = item_id. id ;
525- set_vis ( self , hir_id) ;
513+ let module = self . tcx . hir ( ) . get_module ( module_def_id) . 0 ;
514+ for item_id in & module. item_ids {
515+ let hir_id = item_id. id ;
516+ let item_def_id = self . tcx . hir ( ) . local_def_id ( hir_id) ;
517+ if let Some ( def_kind) = self . tcx . def_kind ( item_def_id) {
518+ let item = self . tcx . hir ( ) . expect_item ( hir_id) ;
519+ let vis = ty:: Visibility :: from_hir ( & item. vis , hir_id, self . tcx ) ;
520+ self . update_macro_reachable_def ( hir_id, def_kind, vis, defining_mod) ;
526521 }
527- if let Some ( exports) = self . tcx . module_exports ( module_def_id) {
528- for export in exports {
529- if export. vis . is_accessible_from ( defining_mod, self . tcx ) {
530- if let Res :: Def ( def_kind, def_id) = export. res {
531- let vis = def_id_visibility ( self . tcx , def_id) . 0 ;
532- if let Some ( hir_id) = self . tcx . hir ( ) . as_local_hir_id ( def_id) {
533- self . update_macro_reachable_def (
534- hir_id,
535- def_kind,
536- vis,
537- defining_mod,
538- ) ;
539- }
522+ }
523+ if let Some ( exports) = self . tcx . module_exports ( module_def_id) {
524+ for export in exports {
525+ if export. vis . is_accessible_from ( defining_mod, self . tcx ) {
526+ if let Res :: Def ( def_kind, def_id) = export. res {
527+ let vis = def_id_visibility ( self . tcx , def_id) . 0 ;
528+ if let Some ( hir_id) = self . tcx . hir ( ) . as_local_hir_id ( def_id) {
529+ self . update_macro_reachable_def ( hir_id, def_kind, vis, defining_mod) ;
540530 }
541531 }
542532 }
543533 }
544- } else if let Some ( hir:: Node :: Item ( hir:: Item {
545- hir_id,
546- ..
547- } ) ) = self . tcx . hir ( ) . get_if_local ( module_def_id) { // #63164
548- // `macro` defined inside of an item is only visible inside of that item's scope.
549- set_vis ( self , * hir_id) ;
550534 }
551535 }
552536
@@ -898,10 +882,14 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
898882 self . tcx . hir ( ) . local_def_id ( md. hir_id )
899883 ) . unwrap ( ) ;
900884 let mut module_id = self . tcx . hir ( ) . as_local_hir_id ( macro_module_def_id) . unwrap ( ) ;
885+ if !self . tcx . hir ( ) . is_hir_id_module ( module_id) {
886+ // `module_id` doesn't correspond to a `mod`, return early (#63164).
887+ return ;
888+ }
901889 let level = if md. vis . node . is_pub ( ) { self . get ( module_id) } else { None } ;
902890 let new_level = self . update ( md. hir_id , level) ;
903891 if new_level. is_none ( ) {
904- return
892+ return ;
905893 }
906894
907895 loop {
0 commit comments