diff options
| author | bors <bors@rust-lang.org> | 2021-03-12 11:46:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-03-12 11:46:50 +0000 |
| commit | 338647db73028aca0198f5330b15bf4bb769a1ea (patch) | |
| tree | c8941a1989734b947680de1d8435fb8ac4acaa42 | |
| parent | 0cc64a34e9823a4ce6491dc5e13e920cd4f5aa31 (diff) | |
| parent | ddd20ef8cba83d97bdfd0b1e113e6ff7ee6e93f3 (diff) | |
| download | rust-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.rs | 5 |
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), |
