about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-06-12 17:56:51 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-06-16 12:23:22 +0300
commit8e8fba1b3bb96bb64f104d85618cab4fe7dc0740 (patch)
tree945c520e4eb62164c52ee7bf0fbcd7aab21f9483
parent6203f68735a1b7511b85560b64995a14f1b40765 (diff)
downloadrust-8e8fba1b3bb96bb64f104d85618cab4fe7dc0740.tar.gz
rust-8e8fba1b3bb96bb64f104d85618cab4fe7dc0740.zip
compiletest: Validate pass modes harder
-rw-r--r--src/test/incremental/issue-59523-on-implemented-is-not-unused.rs2
-rw-r--r--src/test/incremental/issue-59524-layout-scalar-valid-range-is-not-unused.rs2
-rw-r--r--src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs2
-rw-r--r--src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs2
-rw-r--r--src/test/ui/consts/const-eval/const_transmute.rs1
-rw-r--r--src/test/ui/consts/const-eval/enum_discr.rs1
-rw-r--r--src/test/ui/expanded-cfg.rs4
-rw-r--r--src/test/ui/issues/issue-22603.rs4
-rw-r--r--src/test/ui/issues/issue-37515.rs8
-rw-r--r--src/test/ui/single-use-lifetime/one-use-in-fn-return.rs14
-rw-r--r--src/tools/compiletest/src/header.rs41
11 files changed, 49 insertions, 32 deletions
diff --git a/src/test/incremental/issue-59523-on-implemented-is-not-unused.rs b/src/test/incremental/issue-59523-on-implemented-is-not-unused.rs
index 3d16a1543f4..afc08621340 100644
--- a/src/test/incremental/issue-59523-on-implemented-is-not-unused.rs
+++ b/src/test/incremental/issue-59523-on-implemented-is-not-unused.rs
@@ -2,7 +2,7 @@
 // rustc_on_unimplemented, but with this bug we are seeing it fire (on
 // subsequent runs) if incremental compilation is enabled.
 
-// revisions: rpass1 rpass2
+// revisions: cfail1 cfail2
 // compile-pass
 
 #![feature(on_unimplemented)]
diff --git a/src/test/incremental/issue-59524-layout-scalar-valid-range-is-not-unused.rs b/src/test/incremental/issue-59524-layout-scalar-valid-range-is-not-unused.rs
index e4802cba9b6..37bd8d0641f 100644
--- a/src/test/incremental/issue-59524-layout-scalar-valid-range-is-not-unused.rs
+++ b/src/test/incremental/issue-59524-layout-scalar-valid-range-is-not-unused.rs
@@ -3,7 +3,7 @@
 // seeing it fire (on subsequent runs) if incremental compilation is
 // enabled.
 
-// revisions: rpass1 rpass2
+// revisions: cfail1 cfail2
 // compile-pass
 
 #![feature(rustc_attrs)]
diff --git a/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs b/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
index 5f76caabc79..796729ac4cc 100644
--- a/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
+++ b/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
@@ -1,4 +1,4 @@
-// compile-pass
+// error-pattern:returned Box<dyn Error> from main()
 // failure-status: 1
 
 use std::error::Error;
diff --git a/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs b/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs
index bd47a9768f9..2f3a73a30ad 100644
--- a/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs
+++ b/src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-result-box-error_err.rs
@@ -1,4 +1,4 @@
-// compile-pass
+// error-pattern:returned Box<Error> from main()
 // failure-status: 1
 
 use std::io::{Error, ErrorKind};
diff --git a/src/test/ui/consts/const-eval/const_transmute.rs b/src/test/ui/consts/const-eval/const_transmute.rs
index 4726f9dde3a..0e0e003dcf4 100644
--- a/src/test/ui/consts/const-eval/const_transmute.rs
+++ b/src/test/ui/consts/const-eval/const_transmute.rs
@@ -1,4 +1,3 @@
-// compile-pass
 // run-pass
 
 #![feature(const_fn_union)]
diff --git a/src/test/ui/consts/const-eval/enum_discr.rs b/src/test/ui/consts/const-eval/enum_discr.rs
index 4851e752094..e09258f1120 100644
--- a/src/test/ui/consts/const-eval/enum_discr.rs
+++ b/src/test/ui/consts/const-eval/enum_discr.rs
@@ -1,4 +1,3 @@
-// compile-pass
 // run-pass
 
 enum Foo {
diff --git a/src/test/ui/expanded-cfg.rs b/src/test/ui/expanded-cfg.rs
index c98fd7ffea8..baa161af76a 100644
--- a/src/test/ui/expanded-cfg.rs
+++ b/src/test/ui/expanded-cfg.rs
@@ -1,5 +1,4 @@
-// skip-codegen
-// compile-pass
+// check-pass
 
 macro_rules! mac {
     {} => {
@@ -19,5 +18,4 @@ macro_rules! mac {
 
 mac! {}
 
-
 fn main() {}
diff --git a/src/test/ui/issues/issue-22603.rs b/src/test/ui/issues/issue-22603.rs
index e298316f3b9..717f15b76ac 100644
--- a/src/test/ui/issues/issue-22603.rs
+++ b/src/test/ui/issues/issue-22603.rs
@@ -1,5 +1,5 @@
-// skip-codegen
-// compile-pass
+// check-pass
+
 #![feature(unboxed_closures, fn_traits)]
 struct Foo;
 
diff --git a/src/test/ui/issues/issue-37515.rs b/src/test/ui/issues/issue-37515.rs
index cc07bd1d915..caff507c918 100644
--- a/src/test/ui/issues/issue-37515.rs
+++ b/src/test/ui/issues/issue-37515.rs
@@ -1,10 +1,8 @@
-// skip-codegen
-// compile-pass
+// check-pass
+
 #![warn(unused)]
 
 type Z = dyn for<'x> Send;
 //~^ WARN type alias is never used
 
-
-fn main() {
-}
+fn main() {}
diff --git a/src/test/ui/single-use-lifetime/one-use-in-fn-return.rs b/src/test/ui/single-use-lifetime/one-use-in-fn-return.rs
index 876a0a564da..92b25cbf584 100644
--- a/src/test/ui/single-use-lifetime/one-use-in-fn-return.rs
+++ b/src/test/ui/single-use-lifetime/one-use-in-fn-return.rs
@@ -1,20 +1,16 @@
-// compile-pass
-
-#![deny(single_use_lifetimes)]
-#![allow(dead_code)]
-#![allow(unused_variables)]
-
 // Test that we DO NOT warn when lifetime name is used only
 // once in a fn return type -- using `'_` is not legal there,
 // as it must refer back to an argument.
 //
 // (Normally, using `'static` would be preferred, but there are
 // times when that is not what you want.)
-//
-// run-pass
+
+// compile-pass
+
+#![deny(single_use_lifetimes)]
 
 fn b<'a>() -> &'a u32 { // OK: used only in return type
     &22
 }
 
-fn main() { }
+fn main() {}
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs
index 8be15bb1576..1f52421ecbc 100644
--- a/src/tools/compiletest/src/header.rs
+++ b/src/tools/compiletest/src/header.rs
@@ -526,14 +526,41 @@ impl TestProps {
                 self.check_test_line_numbers_match = config.parse_check_test_line_numbers_match(ln);
             }
 
-            if config.parse_name_directive(ln, "check-pass") ||
-               config.parse_name_directive(ln, "skip-codegen") {
-                self.pass_mode = Some(PassMode::Check);
-            } else if config.parse_name_directive(ln, "build-pass") ||
-                      config.parse_name_directive(ln, "compile-pass") {
-                self.pass_mode = Some(PassMode::Build);
+            let check_no_run = |s| {
+                if config.mode != Mode::Ui && config.mode != Mode::Incremental {
+                    panic!("`{}` header is only supported in UI and incremental tests", s);
+                }
+                if config.mode == Mode::Incremental &&
+                   !cfg.map_or(false, |r| r.starts_with("cfail")) &&
+                   !self.revisions.iter().all(|r| r.starts_with("cfail")) {
+                    panic!("`{}` header is only supported in `cfail` incremental tests", s);
+                }
+            };
+            let pass_mode = if config.parse_name_directive(ln, "check-pass") {
+                check_no_run("check-pass");
+                Some(PassMode::Check)
+            } else if config.parse_name_directive(ln, "skip-codegen") {
+                check_no_run("skip-codegen");
+                Some(PassMode::Check)
+            } else if config.parse_name_directive(ln, "build-pass") {
+                check_no_run("build-pass");
+                Some(PassMode::Build)
+            } else if config.parse_name_directive(ln, "compile-pass") {
+                check_no_run("compile-pass");
+                Some(PassMode::Build)
             } else if config.parse_name_directive(ln, "run-pass") {
-                self.pass_mode = Some(PassMode::Run);
+                if config.mode != Mode::Ui && config.mode != Mode::RunPass /* compatibility */ {
+                    panic!("`run-pass` header is only supported in UI tests")
+                }
+                Some(PassMode::Run)
+            } else {
+                None
+            };
+            match (self.pass_mode, pass_mode) {
+                (None, Some(_)) => self.pass_mode = pass_mode,
+                (Some(_), Some(pm)) if pm == PassMode::Check => self.pass_mode = pass_mode,
+                (Some(_), Some(_)) => panic!("multiple `*-pass` headers in a single test"),
+                (_, None) => {}
             }
 
             if !self.disable_ui_testing_normalization {