]> git.lizzy.rs Git - rust.git/commitdiff
Get the test suite working inside the rustc test suite
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Tue, 8 Aug 2017 08:28:05 +0000 (10:28 +0200)
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 10 Aug 2017 16:32:06 +0000 (18:32 +0200)
tests/compiletest.rs

index 7493551ecf7bdb1113749589af20363fc8e9e017..78886d96413fbdad88caa981bb8e52627bf73580 100644 (file)
@@ -13,7 +13,21 @@ macro_rules! eprintln {
     }
 }
 
-const MIRI_PATH: &'static str = concat!("target/", env!("PROFILE"), "/miri");
+fn miri_path() -> PathBuf {
+    if rustc_test_suite().is_some() {
+        PathBuf::from(option_env!("MIRI_PATH").unwrap())
+    } else {
+        PathBuf::from(concat!("target/", env!("PROFILE"), "/miri"))
+    }
+}
+
+fn rustc_test_suite() -> Option<PathBuf> {
+    option_env!("RUSTC_TEST_SUITE").map(PathBuf::from)
+}
+
+fn rustc_lib_path() -> PathBuf {
+    option_env!("RUSTC_LIB_PATH").unwrap().into()
+}
 
 fn compile_fail(sysroot: &Path, path: &str, target: &str, host: &str, fullmir: bool) {
     eprintln!(
@@ -23,9 +37,14 @@ fn compile_fail(sysroot: &Path, path: &str, target: &str, host: &str, fullmir: b
     );
     let mut config = compiletest::default_config();
     config.mode = "compile-fail".parse().expect("Invalid mode");
-    config.rustc_path = MIRI_PATH.into();
+    config.rustc_path = miri_path();
     let mut flags = Vec::new();
-    if fullmir {
+    if rustc_test_suite().is_some() {
+        config.run_lib_path = rustc_lib_path();
+        config.compile_lib_path = rustc_lib_path();
+    }
+    // if we are building as part of the rustc test suite, we already have fullmir for everything
+    if fullmir && rustc_test_suite().is_none() {
         if host != target {
             // skip fullmir on nonhost
             return;
@@ -50,7 +69,12 @@ fn run_pass(path: &str) {
     let mut config = compiletest::default_config();
     config.mode = "run-pass".parse().expect("Invalid mode");
     config.src_base = PathBuf::from(path);
-    config.target_rustcflags = Some("-Dwarnings".to_string());
+    if let Some(rustc_path) = rustc_test_suite() {
+        config.rustc_path = rustc_path;
+        config.run_lib_path = rustc_lib_path();
+        config.compile_lib_path = rustc_lib_path();
+    }
+    config.target_rustcflags = Some(format!("-Dwarnings --sysroot {}", get_sysroot().display()));
     config.host_rustcflags = Some("-Dwarnings".to_string());
     compiletest::run_tests(&config);
 }
@@ -68,9 +92,14 @@ fn miri_pass(path: &str, target: &str, host: &str, fullmir: bool, opt: bool) {
     config.src_base = PathBuf::from(path);
     config.target = target.to_owned();
     config.host = host.to_owned();
-    config.rustc_path = MIRI_PATH.into();
+    config.rustc_path = miri_path();
+    if rustc_test_suite().is_some() {
+        config.run_lib_path = rustc_lib_path();
+        config.compile_lib_path = rustc_lib_path();
+    }
     let mut flags = Vec::new();
-    if fullmir {
+    // if we are building as part of the rustc test suite, we already have fullmir for everything
+    if fullmir && rustc_test_suite().is_none() {
         if host != target {
             // skip fullmir on nonhost
             return;