+ // Taken from https://github.com/Manishearth/rust-clippy/pull/911.
+ let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME"));
+ let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN"));
+ let sysroot = match (home, toolchain) {
+ (Some(home), Some(toolchain)) => format!("{}/toolchains/{}", home, toolchain),
+ _ => option_env!("RUST_SYSROOT")
+ .expect("need to specify RUST_SYSROOT env var or use rustup or multirust")
+ .to_owned(),
+ };
+ run_mode("compile-fail", "compile-fail", &sysroot);
+ for_all_targets(&sysroot, |target| {
+ for file in std::fs::read_dir("tests/run-pass").unwrap() {
+ let file = file.unwrap();
+ if !file.metadata().unwrap().is_file() {
+ continue;
+ }
+ let file = file.path();
+ let stderr = std::io::stderr();
+ writeln!(stderr.lock(), "test [miri-pass] {}", file.to_str().unwrap()).unwrap();
+ let mut cmd = std::process::Command::new("target/debug/miri");
+ cmd.arg(file);
+ cmd.arg(format!("--sysroot={}", sysroot));
+ cmd.arg("-Dwarnings");
+ cmd.arg(format!("-target={}", target));
+ let libs = Path::new(&sysroot).join("lib");
+ let sysroot = libs.join("rustlib").join(&target).join("lib");
+ let paths = std::env::join_paths(&[libs, sysroot]).unwrap();
+ cmd.env(compiletest::procsrv::dylib_env_var(), paths);
+ }
+ let stderr = std::io::stderr();
+ writeln!(stderr.lock(), "").unwrap();
+ })