about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-03-12 11:46:50 +0000
committerbors <bors@rust-lang.org>2021-03-12 11:46:50 +0000
commit338647db73028aca0198f5330b15bf4bb769a1ea (patch)
treec8941a1989734b947680de1d8435fb8ac4acaa42
parent0cc64a34e9823a4ce6491dc5e13e920cd4f5aa31 (diff)
parentddd20ef8cba83d97bdfd0b1e113e6ff7ee6e93f3 (diff)
downloadrust-338647db73028aca0198f5330b15bf4bb769a1ea.tar.gz
rust-338647db73028aca0198f5330b15bf4bb769a1ea.zip
Auto merge of #82422 - petrochenkov:allunst, r=oli-obk
expand: Do not allocate `Lrc` for `allow_internal_unstable` list unless necessary

This allocation is done for any macro defined in the current crate, or used from a different crate.
EDIT: This also removes an `Lrc` increment from each *use* of such macro, which may be more significant.
Noticed when reviewing https://github.com/rust-lang/rust/pull/82367.
This probably doesn't matter, but let's do a perf run.
-rw-r--r--compiler/rustc_expand/src/base.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/compiler/rustc_expand/src/base.rs b/compiler/rustc_expand/src/base.rs
index 666065efdfb..dd93fe8350e 100644
--- a/compiler/rustc_expand/src/base.rs
+++ b/compiler/rustc_expand/src/base.rs
@@ -775,7 +775,7 @@ impl SyntaxExtension {
         attrs: &[ast::Attribute],
     ) -> SyntaxExtension {
         let allow_internal_unstable =
-            Some(attr::allow_internal_unstable(sess, &attrs).collect::<Vec<Symbol>>().into());
+            attr::allow_internal_unstable(sess, &attrs).collect::<Vec<Symbol>>();
 
         let mut local_inner_macros = false;
         if let Some(macro_export) = sess.find_by_name(attrs, sym::macro_export) {
@@ -803,7 +803,8 @@ impl SyntaxExtension {
         SyntaxExtension {
             kind,
             span,
-            allow_internal_unstable,
+            allow_internal_unstable: (!allow_internal_unstable.is_empty())
+                .then(|| allow_internal_unstable.into()),
             allow_internal_unsafe: sess.contains_name(attrs, sym::allow_internal_unsafe),
             local_inner_macros,
             stability: stability.map(|(s, _)| s),