From 98fd50a0793e7430c8b8ee2fba67fad83c668ab3 Mon Sep 17 00:00:00 2001 From: Ben Schreiber Date: Sat, 25 Feb 2017 21:42:22 -0600 Subject: [PATCH 1/2] teach rustc about remove_stable_features and removed no-stack-chech feature. fixes #34915 --- src/libsyntax/feature_gate.rs | 31 ++++++++++++++----- .../compile-fail/deprecated_no_stack_check.rs | 16 ++++++++++ 2 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 src/test/compile-fail/deprecated_no_stack_check.rs diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index c2b72edb66c6c..4b23345719775 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -77,12 +77,19 @@ macro_rules! declare_features { }; ($((removed, $feature: ident, $ver: expr, $issue: expr),)+) => { - /// Represents features which has since been removed (it was once Active) + /// Represents unstable features which have since been removed (it was once Active) const REMOVED_FEATURES: &'static [(&'static str, &'static str, Option)] = &[ $((stringify!($feature), $ver, $issue)),+ ]; }; + ($((stable_removed, $feature: ident, $ver: expr, $issue: expr),)+) => { + /// Represents stable features which have since been removed (it was once Accepted) + const STABLE_REMOVED_FEATURES: &'static [(&'static str, &'static str, Option)] = &[ + $((stringify!($feature), $ver, $issue)),+ + ]; + }; + ($((accepted, $feature: ident, $ver: expr, $issue: expr),)+) => { /// Those language feature has since been Accepted (it was once Active) const ACCEPTED_FEATURES: &'static [(&'static str, &'static str, Option)] = &[ @@ -349,6 +356,11 @@ declare_features! ( // rustc internal (removed, unmarked_api, "1.0.0", None), (removed, pushpop_unsafe, "1.2.0", None), + //(removed, no_stack_check, "1.0.0", None), +); + +declare_features! ( + (stable_removed, no_stack_check, "1.0.0", None), ); declare_features! ( @@ -505,9 +517,6 @@ pub const BUILTIN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeG not yet settled", cfg_fn!(structural_match))), - // Not used any more, but we can't feature gate it - ("no_stack_check", Normal, Ungated), - ("plugin", CrateLevel, Gated(Stability::Unstable, "plugin", "compiler plugins are experimental \ @@ -909,8 +918,10 @@ fn find_lang_feature_issue(feature: &str) -> Option { // assert!(issue.is_some()) issue } else { - // search in Accepted or Removed features - match ACCEPTED_FEATURES.iter().chain(REMOVED_FEATURES).find(|t| t.0 == feature) { + // search in Accepted, Removed, or Stable Removed features + let found = ACCEPTED_FEATURES.iter().chain(REMOVED_FEATURES).chain(STABLE_REMOVED_FEATURES) + .find(|t| t.0 == feature); + match found { Some(&(_, _, issue)) => issue, None => panic!("Feature `{}` is not declared anywhere", feature), } @@ -1444,9 +1455,15 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute]) -> F feature_checker.collect(&features, mi.span); } else if let Some(&(_, _, _)) = REMOVED_FEATURES.iter() - .find(|& &(n, _, _)| name == n) { + .find(|& &(n, _, _)| name == n) + .or_else(|| STABLE_REMOVED_FEATURES.iter() + .find(|& &(n, _, _)| name == n)) { span_err!(span_handler, mi.span, E0557, "feature has been removed"); } + //else if let Some(&(_, _, _)) = STABLE_REMOVED_FEATURES.iter() + // .find(|& &(n, _, _)| name == n) { + // span_err!(span_handler, mi.span, E0557, "feature has been removed"); + //} else if let Some(&(_, _, _)) = ACCEPTED_FEATURES.iter() .find(|& &(n, _, _)| name == n) { features.declared_stable_lang_features.push((name, mi.span)); diff --git a/src/test/compile-fail/deprecated_no_stack_check.rs b/src/test/compile-fail/deprecated_no_stack_check.rs new file mode 100644 index 0000000000000..38aaefd52b342 --- /dev/null +++ b/src/test/compile-fail/deprecated_no_stack_check.rs @@ -0,0 +1,16 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![deny(warnings)] +#![feature(no_stack_check)] +//~^ ERROR: 12:12: 12:26: feature has been removed [E0557] +fn main() { + +} From 9c5e4afb17ce10d9411af3a7e0fae1ce45b1637d Mon Sep 17 00:00:00 2001 From: Ben Schreiber Date: Sat, 25 Feb 2017 21:49:24 -0600 Subject: [PATCH 2/2] removed unneeded comment blocks --- src/libsyntax/feature_gate.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index 4b23345719775..1e6ded2019581 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -356,7 +356,6 @@ declare_features! ( // rustc internal (removed, unmarked_api, "1.0.0", None), (removed, pushpop_unsafe, "1.2.0", None), - //(removed, no_stack_check, "1.0.0", None), ); declare_features! ( @@ -1460,10 +1459,6 @@ pub fn get_features(span_handler: &Handler, krate_attrs: &[ast::Attribute]) -> F .find(|& &(n, _, _)| name == n)) { span_err!(span_handler, mi.span, E0557, "feature has been removed"); } - //else if let Some(&(_, _, _)) = STABLE_REMOVED_FEATURES.iter() - // .find(|& &(n, _, _)| name == n) { - // span_err!(span_handler, mi.span, E0557, "feature has been removed"); - //} else if let Some(&(_, _, _)) = ACCEPTED_FEATURES.iter() .find(|& &(n, _, _)| name == n) { features.declared_stable_lang_features.push((name, mi.span));