@@ -509,44 +509,28 @@ impl EmbargoVisitor<'tcx> {
509
509
}
510
510
511
511
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
-
521
512
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) ;
526
521
}
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) ;
540
530
}
541
531
}
542
532
}
543
533
}
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) ;
550
534
}
551
535
}
552
536
@@ -898,10 +882,14 @@ impl Visitor<'tcx> for EmbargoVisitor<'tcx> {
898
882
self . tcx . hir ( ) . local_def_id ( md. hir_id )
899
883
) . unwrap ( ) ;
900
884
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
+ }
901
889
let level = if md. vis . node . is_pub ( ) { self . get ( module_id) } else { None } ;
902
890
let new_level = self . update ( md. hir_id , level) ;
903
891
if new_level. is_none ( ) {
904
- return
892
+ return ;
905
893
}
906
894
907
895
loop {
0 commit comments