about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorBen Schreiber <bjschre2@illinois.edu>2017-02-25 21:42:22 -0600
committerBen Schreiber <bjschre2@illinois.edu>2017-02-25 21:42:22 -0600
commit98fd50a0793e7430c8b8ee2fba67fad83c668ab3 (patch)
tree4627bbb98b9fe09868dbf070fc54e0dafbb0e5c8 /src/libsyntax
parent1572bf104dbf65d58bd6b889fa46229c9b92d6f9 (diff)
downloadrust-98fd50a0793e7430c8b8ee2fba67fad83c668ab3.tar.gz
rust-98fd50a0793e7430c8b8ee2fba67fad83c668ab3.zip
teach rustc about remove_stable_features and removed no-stack-chech feature. fixes #34915
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/feature_gate.rs31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs
index c2b72edb66c..4b233457197 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<u32>)] = &[
             $((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<u32>)] = &[
+            $((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<u32>)] = &[
@@ -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<u32> {
         // 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));