diff options
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 22 | ||||
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax_pos/lib.rs | 5 |
3 files changed, 20 insertions, 10 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 4409bf13b6c..a79f3271fcb 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -379,14 +379,20 @@ pub fn compile( let allow_internal_unstable = attr::find_by_name(&def.attrs, "allow_internal_unstable") .map_or(Vec::new(), |attr| attr .meta_item_list() - .unwrap_or_else(|| sess.span_diagnostic.span_bug( - attr.span, "allow_internal_unstable expects list of feature names", - )) - .iter() - .map(|it| it.name().unwrap_or_else(|| sess.span_diagnostic.span_bug( - it.span, "allow internal unstable expects feature names", - ))) - .collect() + .map(|list| list.iter() + .map(|it| it.name().unwrap_or_else(|| sess.span_diagnostic.span_bug( + it.span, "allow internal unstable expects feature names", + ))) + .collect() + ) + .unwrap_or_else(|| { + sess.span_diagnostic.span_warn( + attr.span, "allow_internal_unstable expects list of feature names. In the \ + future this will become a hard error. Please use `allow_internal_unstable(\ + foo, bar)` to only allow the `foo` and `bar` features", + ); + vec![Symbol::intern("allow_internal_unstable_backcompat_hack")] + }) ); let allow_internal_unsafe = attr::contains_name(&def.attrs, "allow_internal_unsafe"); let mut local_inner_macros = false; diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 1e1b315824f..08f1473200c 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -1091,7 +1091,8 @@ pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeTemplate, Attribu stable", cfg_fn!(profiler_runtime))), - ("allow_internal_unstable", Normal, template!(List: "feat1, feat2"), Gated(Stability::Unstable, + ("allow_internal_unstable", Normal, template!(Word, List: "feat1, feat2"), + Gated(Stability::Unstable, "allow_internal_unstable", EXPLAIN_ALLOW_INTERNAL_UNSTABLE, cfg_fn!(allow_internal_unstable))), diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index efb21e06f34..87c4d02fa4f 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -387,7 +387,10 @@ impl Span { /// `#[allow_internal_unstable]`). pub fn allows_unstable(&self, feature: &str) -> bool { match self.ctxt().outer().expn_info() { - Some(info) => info.allow_internal_unstable.iter().any(|&f| f == feature), + Some(info) => info + .allow_internal_unstable + .iter() + .any(|&f| f == feature || f == "allow_internal_unstable_backcompat_hack"), None => false, } } |
