From a2ae1912954bf6e21c706258348735218ceb1ab4 Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Thu, 22 Jul 2021 17:40:01 -0500 Subject: [PATCH] Rename `known_attrs` to `expanded_inert_attrs` and move to rustc_expand There's no need for this to be (untracked) global state. --- compiler/rustc_expand/src/base.rs | 6 ++++++ compiler/rustc_expand/src/expand.rs | 4 ++-- compiler/rustc_session/src/session.rs | 10 ---------- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/compiler/rustc_expand/src/base.rs b/compiler/rustc_expand/src/base.rs index 8c6aef80635cf..3d5bc770c4fb0 100644 --- a/compiler/rustc_expand/src/base.rs +++ b/compiler/rustc_expand/src/base.rs @@ -1,6 +1,7 @@ use crate::expand::{self, AstFragment, Invocation}; use crate::module::DirOwnership; +use rustc_ast::attr::MarkedAttrs; use rustc_ast::ptr::P; use rustc_ast::token::{self, Nonterminal}; use rustc_ast::tokenstream::{CanSynthesizeMissingTokens, TokenStream}; @@ -951,6 +952,10 @@ pub struct ExtCtxt<'a> { /// /// `Ident` is the module name. pub(super) extern_mod_loaded: OnExternModLoaded<'a>, + /// When we 'expand' an inert attribute, we leave it + /// in the AST, but insert it here so that we know + /// not to expand it again. + pub(super) expanded_inert_attrs: MarkedAttrs, } impl<'a> ExtCtxt<'a> { @@ -977,6 +982,7 @@ impl<'a> ExtCtxt<'a> { }, force_mode: false, expansions: FxHashMap::default(), + expanded_inert_attrs: MarkedAttrs::new(), } } diff --git a/compiler/rustc_expand/src/expand.rs b/compiler/rustc_expand/src/expand.rs index dcd871c9d2050..a9250bf978778 100644 --- a/compiler/rustc_expand/src/expand.rs +++ b/compiler/rustc_expand/src/expand.rs @@ -754,7 +754,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> { } } SyntaxExtensionKind::NonMacroAttr { mark_used } => { - self.cx.sess.mark_attr_known(&attr); + self.cx.expanded_inert_attrs.mark(&attr); if *mark_used { self.cx.sess.mark_attr_used(&attr); } @@ -1040,7 +1040,7 @@ impl<'a, 'b> InvocationCollector<'a, 'b> { item.visit_attrs(|attrs| { attr = attrs .iter() - .position(|a| !self.cx.sess.is_attr_known(a) && !is_builtin_attr(a)) + .position(|a| !self.cx.expanded_inert_attrs.is_marked(a) && !is_builtin_attr(a)) .map(|attr_pos| { let attr = attrs.remove(attr_pos); let following_derives = attrs[attr_pos..] diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index 86d495c3353b3..369af437c4384 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -219,7 +219,6 @@ pub struct Session { /// Set of enabled features for the current target. pub target_features: FxHashSet, - known_attrs: Lock, used_attrs: Lock, /// `Span`s for `if` conditions that we have suggested turning into `if let`. @@ -1076,14 +1075,6 @@ impl Session { == config::InstrumentCoverage::ExceptUnusedFunctions } - pub fn mark_attr_known(&self, attr: &Attribute) { - self.known_attrs.lock().mark(attr) - } - - pub fn is_attr_known(&self, attr: &Attribute) -> bool { - self.known_attrs.lock().is_marked(attr) - } - pub fn mark_attr_used(&self, attr: &Attribute) { self.used_attrs.lock().mark(attr) } @@ -1389,7 +1380,6 @@ pub fn build_session( miri_unleashed_features: Lock::new(Default::default()), asm_arch, target_features: FxHashSet::default(), - known_attrs: Lock::new(MarkedAttrs::new()), used_attrs: Lock::new(MarkedAttrs::new()), if_let_suggestions: Default::default(), };