about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-12-21 01:47:03 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-12-27 15:51:37 +0300
commit15cefe4b2a65bb2a4febcd353cb37b90dfafa4f1 (patch)
tree0751ff1245a5e139c0bb3399441b9e8c76e71d9f /src
parentb99fb2f5445fa5a791cca7601c7d609aaf708304 (diff)
downloadrust-15cefe4b2a65bb2a4febcd353cb37b90dfafa4f1.tar.gz
rust-15cefe4b2a65bb2a4febcd353cb37b90dfafa4f1.zip
Make sure feature gate errors are recoverable
Diffstat (limited to 'src')
-rw-r--r--src/librustc/lint/levels.rs6
-rw-r--r--src/librustc_typeck/collect.rs1
-rw-r--r--src/libsyntax/ext/expand.rs1
-rw-r--r--src/libsyntax_ext/asm.rs1
-rw-r--r--src/libsyntax_ext/concat_idents.rs1
-rw-r--r--src/libsyntax_ext/format.rs1
-rw-r--r--src/libsyntax_ext/global_asm.rs1
-rw-r--r--src/libsyntax_ext/log_syntax.rs1
-rw-r--r--src/libsyntax_ext/test_case.rs2
-rw-r--r--src/libsyntax_ext/trace_macros.rs1
-rw-r--r--src/test/ui/feature-gates/feature-gate-asm2.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-asm2.stderr4
-rw-r--r--src/test/ui/feature-gates/feature-gate-concat_idents2.rs1
-rw-r--r--src/test/ui/feature-gates/feature-gate-concat_idents2.stderr11
-rw-r--r--src/test/ui/feature-gates/feature-gate-log_syntax.stdout1
-rw-r--r--src/test/ui/feature-gates/feature-gate-log_syntax2.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-log_syntax2.stderr4
-rw-r--r--src/test/ui/feature-gates/feature-gate-log_syntax2.stdout1
-rw-r--r--src/test/ui/trace_macros-gate.rs12
-rw-r--r--src/test/ui/trace_macros-gate.stderr36
20 files changed, 32 insertions, 58 deletions
diff --git a/src/librustc/lint/levels.rs b/src/librustc/lint/levels.rs
index 363ee9fa765..1ae12fec506 100644
--- a/src/librustc/lint/levels.rs
+++ b/src/librustc/lint/levels.rs
@@ -222,14 +222,13 @@ impl<'a> LintLevelsBuilder<'a> {
                 match item.node {
                     ast::MetaItemKind::Word => {}  // actual lint names handled later
                     ast::MetaItemKind::NameValue(ref name_value) => {
-                        let gate_reasons = !self.sess.features_untracked().lint_reasons;
                         if item.ident == "reason" {
                             // found reason, reslice meta list to exclude it
                             metas = &metas[0..metas.len()-1];
                             // FIXME (#55112): issue unused-attributes lint if we thereby
                             // don't have any lint names (`#[level(reason = "foo")]`)
                             if let ast::LitKind::Str(rationale, _) = name_value.node {
-                                if gate_reasons {
+                                if !self.sess.features_untracked().lint_reasons {
                                     feature_gate::emit_feature_err(
                                         &self.sess.parse_sess,
                                         "lint_reasons",
@@ -237,9 +236,8 @@ impl<'a> LintLevelsBuilder<'a> {
                                         feature_gate::GateIssue::Language,
                                         "lint reasons are experimental"
                                     );
-                                } else {
-                                    reason = Some(rationale);
                                 }
+                                reason = Some(rationale);
                             } else {
                                 let mut err = bad_attr(name_value.span);
                                 err.help("reason must be a string literal");
diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs
index a46309c5ea1..54dfc57bac6 100644
--- a/src/librustc_typeck/collect.rs
+++ b/src/librustc_typeck/collect.rs
@@ -2210,7 +2210,6 @@ fn from_target_feature(
                     feature_gate::GateIssue::Language,
                     &format!("the target feature `{}` is currently unstable", feature),
                 );
-                return None;
             }
             Some(Symbol::intern(feature))
         }));
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index f8f1e830770..3863778fe72 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -722,7 +722,6 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
                     emit_feature_err(this.cx.parse_sess, &*feature.as_str(), span,
                                      GateIssue::Library(Some(issue)), &explain);
                     this.cx.trace_macros_diag();
-                    return Err(kind.dummy(span));
                 }
             }
 
diff --git a/src/libsyntax_ext/asm.rs b/src/libsyntax_ext/asm.rs
index b781e0203e4..a8f3c40db60 100644
--- a/src/libsyntax_ext/asm.rs
+++ b/src/libsyntax_ext/asm.rs
@@ -49,7 +49,6 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt,
                                        sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_ASM);
-        return DummyResult::expr(sp);
     }
 
     // Split the tts before the first colon, to avoid `asm!("x": y)`  being
diff --git a/src/libsyntax_ext/concat_idents.rs b/src/libsyntax_ext/concat_idents.rs
index e2375c6cc19..9c49a59678f 100644
--- a/src/libsyntax_ext/concat_idents.rs
+++ b/src/libsyntax_ext/concat_idents.rs
@@ -20,7 +20,6 @@ pub fn expand_syntax_ext<'cx>(cx: &'cx mut ExtCtxt,
                                        sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_CONCAT_IDENTS);
-        return base::DummyResult::expr(sp);
     }
 
     if tts.is_empty() {
diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs
index 10516503480..9d29e2b0fb6 100644
--- a/src/libsyntax_ext/format.rs
+++ b/src/libsyntax_ext/format.rs
@@ -713,7 +713,6 @@ pub fn expand_format_args_nl<'cx>(
                                        sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_FORMAT_ARGS_NL);
-        return DummyResult::expr(sp);
     }
     sp = sp.apply_mark(ecx.current_expansion.mark);
     match parse_args(ecx, sp, tts) {
diff --git a/src/libsyntax_ext/global_asm.rs b/src/libsyntax_ext/global_asm.rs
index 16b7ac178be..a58c267ab4f 100644
--- a/src/libsyntax_ext/global_asm.rs
+++ b/src/libsyntax_ext/global_asm.rs
@@ -29,7 +29,6 @@ pub fn expand_global_asm<'cx>(cx: &'cx mut ExtCtxt,
                                        sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_GLOBAL_ASM);
-        return DummyResult::any(sp);
     }
 
     let mut p = cx.new_parser_from_tts(tts);
diff --git a/src/libsyntax_ext/log_syntax.rs b/src/libsyntax_ext/log_syntax.rs
index f6bb1285c53..a143186b945 100644
--- a/src/libsyntax_ext/log_syntax.rs
+++ b/src/libsyntax_ext/log_syntax.rs
@@ -14,7 +14,6 @@ pub fn expand_syntax_ext<'cx>(cx: &'cx mut base::ExtCtxt,
                                        sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_LOG_SYNTAX);
-        return base::DummyResult::any(sp);
     }
 
     println!("{}", print::pprust::tts_to_string(tts));
diff --git a/src/libsyntax_ext/test_case.rs b/src/libsyntax_ext/test_case.rs
index c467370eed3..04e33671872 100644
--- a/src/libsyntax_ext/test_case.rs
+++ b/src/libsyntax_ext/test_case.rs
@@ -31,8 +31,6 @@ pub fn expand(
                                        attr_sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_CUSTOM_TEST_FRAMEWORKS);
-
-        return vec![anno_item];
     }
 
     if !ecx.ecfg.should_test { return vec![]; }
diff --git a/src/libsyntax_ext/trace_macros.rs b/src/libsyntax_ext/trace_macros.rs
index b20da5af09a..638d7b5568b 100644
--- a/src/libsyntax_ext/trace_macros.rs
+++ b/src/libsyntax_ext/trace_macros.rs
@@ -15,7 +15,6 @@ pub fn expand_trace_macros(cx: &mut ExtCtxt,
                                        sp,
                                        feature_gate::GateIssue::Language,
                                        feature_gate::EXPLAIN_TRACE_MACROS);
-        return base::DummyResult::any(sp);
     }
 
     match (tt.len(), tt.first()) {
diff --git a/src/test/ui/feature-gates/feature-gate-asm2.rs b/src/test/ui/feature-gates/feature-gate-asm2.rs
index b842cba8a7d..259b0a14e5c 100644
--- a/src/test/ui/feature-gates/feature-gate-asm2.rs
+++ b/src/test/ui/feature-gates/feature-gate-asm2.rs
@@ -2,6 +2,6 @@
 
 fn main() {
     unsafe {
-        println!("{}", asm!("")); //~ ERROR inline assembly is not stable
+        println!("{:?}", asm!("")); //~ ERROR inline assembly is not stable
     }
 }
diff --git a/src/test/ui/feature-gates/feature-gate-asm2.stderr b/src/test/ui/feature-gates/feature-gate-asm2.stderr
index aadedc88707..65c267a7695 100644
--- a/src/test/ui/feature-gates/feature-gate-asm2.stderr
+++ b/src/test/ui/feature-gates/feature-gate-asm2.stderr
@@ -1,8 +1,8 @@
 error[E0658]: inline assembly is not stable enough for use and is subject to change (see issue #29722)
   --> $DIR/feature-gate-asm2.rs:5:24
    |
-LL |         println!("{}", asm!("")); //~ ERROR inline assembly is not stable
-   |                        ^^^^^^^^
+LL |         println!("{:?}", asm!("")); //~ ERROR inline assembly is not stable
+   |                          ^^^^^^^^
    |
    = help: add #![feature(asm)] to the crate attributes to enable
 
diff --git a/src/test/ui/feature-gates/feature-gate-concat_idents2.rs b/src/test/ui/feature-gates/feature-gate-concat_idents2.rs
index 659e9626501..0cc6c577e8d 100644
--- a/src/test/ui/feature-gates/feature-gate-concat_idents2.rs
+++ b/src/test/ui/feature-gates/feature-gate-concat_idents2.rs
@@ -2,4 +2,5 @@
 
 fn main() {
     concat_idents!(a, b); //~ ERROR `concat_idents` is not stable enough
+                          //~| ERROR cannot find value `ab` in this scope
 }
diff --git a/src/test/ui/feature-gates/feature-gate-concat_idents2.stderr b/src/test/ui/feature-gates/feature-gate-concat_idents2.stderr
index 23c2e297645..eb648cbd56f 100644
--- a/src/test/ui/feature-gates/feature-gate-concat_idents2.stderr
+++ b/src/test/ui/feature-gates/feature-gate-concat_idents2.stderr
@@ -6,6 +6,13 @@ LL |     concat_idents!(a, b); //~ ERROR `concat_idents` is not stable enough
    |
    = help: add #![feature(concat_idents)] to the crate attributes to enable
 
-error: aborting due to previous error
+error[E0425]: cannot find value `ab` in this scope
+  --> $DIR/feature-gate-concat_idents2.rs:14:5
+   |
+LL |     concat_idents!(a, b); //~ ERROR `concat_idents` is not stable enough
+   |     ^^^^^^^^^^^^^^^^^^^^^ not found in this scope
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0658`.
+Some errors occurred: E0425, E0658.
+For more information about an error, try `rustc --explain E0425`.
diff --git a/src/test/ui/feature-gates/feature-gate-log_syntax.stdout b/src/test/ui/feature-gates/feature-gate-log_syntax.stdout
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-log_syntax.stdout
@@ -0,0 +1 @@
+
diff --git a/src/test/ui/feature-gates/feature-gate-log_syntax2.rs b/src/test/ui/feature-gates/feature-gate-log_syntax2.rs
index 95baea6f7e4..a3906dcc16e 100644
--- a/src/test/ui/feature-gates/feature-gate-log_syntax2.rs
+++ b/src/test/ui/feature-gates/feature-gate-log_syntax2.rs
@@ -1,5 +1,5 @@
 // gate-test-log_syntax
 
 fn main() {
-    println!("{}", log_syntax!()); //~ ERROR `log_syntax!` is not stable
+    println!("{:?}", log_syntax!()); //~ ERROR `log_syntax!` is not stable
 }
diff --git a/src/test/ui/feature-gates/feature-gate-log_syntax2.stderr b/src/test/ui/feature-gates/feature-gate-log_syntax2.stderr
index 7f65794e5de..9ed3bbf7b75 100644
--- a/src/test/ui/feature-gates/feature-gate-log_syntax2.stderr
+++ b/src/test/ui/feature-gates/feature-gate-log_syntax2.stderr
@@ -1,8 +1,8 @@
 error[E0658]: `log_syntax!` is not stable enough for use and is subject to change (see issue #29598)
   --> $DIR/feature-gate-log_syntax2.rs:4:20
    |
-LL |     println!("{}", log_syntax!()); //~ ERROR `log_syntax!` is not stable
-   |                    ^^^^^^^^^^^^^
+LL |     println!("{:?}", log_syntax!()); //~ ERROR `log_syntax!` is not stable
+   |                      ^^^^^^^^^^^^^
    |
    = help: add #![feature(log_syntax)] to the crate attributes to enable
 
diff --git a/src/test/ui/feature-gates/feature-gate-log_syntax2.stdout b/src/test/ui/feature-gates/feature-gate-log_syntax2.stdout
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/src/test/ui/feature-gates/feature-gate-log_syntax2.stdout
@@ -0,0 +1 @@
+
diff --git a/src/test/ui/trace_macros-gate.rs b/src/test/ui/trace_macros-gate.rs
index d32ada5abc9..c9af04741ac 100644
--- a/src/test/ui/trace_macros-gate.rs
+++ b/src/test/ui/trace_macros-gate.rs
@@ -2,15 +2,9 @@
 
 fn main() {
     trace_macros!(); //~ ERROR `trace_macros` is not stable
-    trace_macros!(1); //~ ERROR `trace_macros` is not stable
-    trace_macros!(ident); //~ ERROR `trace_macros` is not stable
-    trace_macros!(for); //~ ERROR `trace_macros` is not stable
-    trace_macros!(true,); //~ ERROR `trace_macros` is not stable
-    trace_macros!(false 1); //~ ERROR `trace_macros` is not stable
-
-    // Errors are signalled early for the above, before expansion.
-    // See trace_macros-gate2 and trace_macros-gate3. for examples
-    // of the below being caught.
+                     //~| ERROR trace_macros! accepts only `true` or `false`
+    trace_macros!(true); //~ ERROR `trace_macros` is not stable
+    trace_macros!(false); //~ ERROR `trace_macros` is not stable
 
     macro_rules! expando {
         ($x: ident) => { trace_macros!($x) } //~ ERROR `trace_macros` is not stable
diff --git a/src/test/ui/trace_macros-gate.stderr b/src/test/ui/trace_macros-gate.stderr
index 1f7d8e898b6..a411fae8bcb 100644
--- a/src/test/ui/trace_macros-gate.stderr
+++ b/src/test/ui/trace_macros-gate.stderr
@@ -6,48 +6,30 @@ LL |     trace_macros!(); //~ ERROR `trace_macros` is not stable
    |
    = help: add #![feature(trace_macros)] to the crate attributes to enable
 
-error[E0658]: `trace_macros` is not stable enough for use and is subject to change (see issue #29598)
-  --> $DIR/trace_macros-gate.rs:5:5
-   |
-LL |     trace_macros!(1); //~ ERROR `trace_macros` is not stable
-   |     ^^^^^^^^^^^^^^^^^
+error: trace_macros! accepts only `true` or `false`
+  --> $DIR/trace_macros-gate.rs:14:5
    |
-   = help: add #![feature(trace_macros)] to the crate attributes to enable
+LL |     trace_macros!(); //~ ERROR `trace_macros` is not stable
+   |     ^^^^^^^^^^^^^^^^
 
 error[E0658]: `trace_macros` is not stable enough for use and is subject to change (see issue #29598)
   --> $DIR/trace_macros-gate.rs:6:5
    |
-LL |     trace_macros!(ident); //~ ERROR `trace_macros` is not stable
-   |     ^^^^^^^^^^^^^^^^^^^^^
+LL |     trace_macros!(true); //~ ERROR `trace_macros` is not stable
+   |     ^^^^^^^^^^^^^^^^^^^^
    |
    = help: add #![feature(trace_macros)] to the crate attributes to enable
 
 error[E0658]: `trace_macros` is not stable enough for use and is subject to change (see issue #29598)
   --> $DIR/trace_macros-gate.rs:7:5
    |
-LL |     trace_macros!(for); //~ ERROR `trace_macros` is not stable
-   |     ^^^^^^^^^^^^^^^^^^^
-   |
-   = help: add #![feature(trace_macros)] to the crate attributes to enable
-
-error[E0658]: `trace_macros` is not stable enough for use and is subject to change (see issue #29598)
-  --> $DIR/trace_macros-gate.rs:8:5
-   |
-LL |     trace_macros!(true,); //~ ERROR `trace_macros` is not stable
+LL |     trace_macros!(false); //~ ERROR `trace_macros` is not stable
    |     ^^^^^^^^^^^^^^^^^^^^^
    |
    = help: add #![feature(trace_macros)] to the crate attributes to enable
 
 error[E0658]: `trace_macros` is not stable enough for use and is subject to change (see issue #29598)
-  --> $DIR/trace_macros-gate.rs:9:5
-   |
-LL |     trace_macros!(false 1); //~ ERROR `trace_macros` is not stable
-   |     ^^^^^^^^^^^^^^^^^^^^^^^
-   |
-   = help: add #![feature(trace_macros)] to the crate attributes to enable
-
-error[E0658]: `trace_macros` is not stable enough for use and is subject to change (see issue #29598)
-  --> $DIR/trace_macros-gate.rs:16:26
+  --> $DIR/trace_macros-gate.rs:20:26
    |
 LL |         ($x: ident) => { trace_macros!($x) } //~ ERROR `trace_macros` is not stable
    |                          ^^^^^^^^^^^^^^^^^
@@ -57,6 +39,6 @@ LL |     expando!(true);
    |
    = help: add #![feature(trace_macros)] to the crate attributes to enable
 
-error: aborting due to 7 previous errors
+error: aborting due to 5 previous errors
 
 For more information about this error, try `rustc --explain E0658`.