diff --git a/compiler/rustc_resolve/src/build_reduced_graph.rs b/compiler/rustc_resolve/src/build_reduced_graph.rs index 4c307e8a6a3d7..28a64b012479a 100644 --- a/compiler/rustc_resolve/src/build_reduced_graph.rs +++ b/compiler/rustc_resolve/src/build_reduced_graph.rs @@ -204,7 +204,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { pub(crate) fn get_macro(&self, res: Res) -> Option<&'ra MacroData> { match res { Res::Def(DefKind::Macro(..), def_id) => Some(self.get_macro_by_def_id(def_id)), - Res::NonMacroAttr(_) => Some(self.non_macro_attr), _ => None, } } diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index b15e4b1b72774..d749992952f87 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -1392,7 +1392,7 @@ pub struct Resolver<'ra, 'tcx> { extern_macro_map: CacheRefCell>, dummy_ext_bang: Arc, dummy_ext_derive: Arc, - non_macro_attr: &'ra MacroData, + non_macro_attr: Arc, local_macro_def_scopes: FxHashMap> = default::fx_hash_map(), ast_transform_scopes: FxHashMap> = default::fx_hash_map(), unused_macros: FxIndexMap, @@ -1812,8 +1812,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { extern_macro_map: Default::default(), dummy_ext_bang: Arc::new(SyntaxExtension::dummy_bang(edition)), dummy_ext_derive: Arc::new(SyntaxExtension::dummy_derive(edition)), - non_macro_attr: arenas - .alloc_macro(MacroData::new(Arc::new(SyntaxExtension::non_macro_attr(edition)))), + non_macro_attr: Arc::new(SyntaxExtension::non_macro_attr(edition)), unused_macros: Default::default(), unused_macro_rules: Default::default(), single_segment_macro_resolutions: Default::default(), @@ -1984,7 +1983,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { match macro_kind { MacroKind::Bang => Arc::clone(&self.dummy_ext_bang), MacroKind::Derive => Arc::clone(&self.dummy_ext_derive), - MacroKind::Attr => Arc::clone(&self.non_macro_attr.ext), + MacroKind::Attr => Arc::clone(&self.non_macro_attr), } } diff --git a/compiler/rustc_resolve/src/macros.rs b/compiler/rustc_resolve/src/macros.rs index dd9f500ff88d0..3686c6ba86e26 100644 --- a/compiler/rustc_resolve/src/macros.rs +++ b/compiler/rustc_resolve/src/macros.rs @@ -869,21 +869,25 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { }; let res = res?; - let ext = match deleg_impl { - Some((impl_def_id, star_span)) => match res { - Res::Def(DefKind::Trait, def_id) => { - let edition = self.tcx.sess.edition(); - Some(Arc::new(SyntaxExtension::glob_delegation( - def_id, - impl_def_id, - star_span, - edition, - ))) - } - _ => None, - }, - None => self.get_macro(res).map(|macro_data| Arc::clone(¯o_data.ext)), + let ext = match res { + Res::Def(DefKind::Macro(..), def_id) => { + let md = self.get_macro_by_def_id(def_id); + Some(Arc::clone(&md.ext)) + } + Res::Def(DefKind::Trait, def_id) if let Some((impl_def_id, star_span)) = deleg_impl => { + let edition = self.tcx.sess.edition(); + Some(Arc::new(SyntaxExtension::glob_delegation( + def_id, + impl_def_id, + star_span, + edition, + ))) + } + // Avoid ICE-ing on tool attributes in weird positions like `rustfmt::skip!()` + Res::NonMacroAttr(_) => Some(Arc::clone(&self.non_macro_attr)), + _ => None, }; + Ok((ext, res)) }