2016-04-22 07:38:46 -05:00
|
|
|
// error-pattern:no mir for DefId
|
|
|
|
|
|
|
|
use std::env;
|
|
|
|
use std::process::{Command, Output};
|
|
|
|
|
|
|
|
fn run_miri(file: &str, sysroot: &str) -> Output {
|
|
|
|
let path = env::current_dir().unwrap();
|
|
|
|
let libpath = path.join("target").join("debug");
|
|
|
|
let libpath = libpath.to_str().unwrap();
|
|
|
|
let libpath2 = path.join("target").join("debug").join("deps");
|
|
|
|
let libpath2 = libpath2.to_str().unwrap();
|
2016-05-31 09:41:26 -05:00
|
|
|
let mut args = vec![
|
|
|
|
"run".to_string(), "--".to_string(),
|
|
|
|
"--sysroot".to_string(), sysroot.to_string(),
|
|
|
|
"-L".to_string(), libpath.to_string(),
|
|
|
|
"-L".to_string(), libpath2.to_string(),
|
|
|
|
file.to_string()
|
|
|
|
];
|
|
|
|
for file in std::fs::read_dir("target/debug/deps").unwrap() {
|
|
|
|
let file = file.unwrap();
|
|
|
|
if file.file_type().unwrap().is_file() {
|
|
|
|
let path = file.path();
|
|
|
|
if let Some(ext) = path.extension() {
|
|
|
|
if ext == "rlib" {
|
|
|
|
let name = path.file_stem().unwrap().to_str().unwrap();
|
|
|
|
if let Some(dash) = name.rfind('-') {
|
|
|
|
if name.starts_with("lib") {
|
|
|
|
args.push("--extern".to_string());
|
|
|
|
args.push(format!("{}={}", &name[3..dash], path.to_str().unwrap()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-04-22 07:38:46 -05:00
|
|
|
Command::new("cargo")
|
2016-05-31 09:41:26 -05:00
|
|
|
.args(&args)
|
2016-04-22 07:38:46 -05:00
|
|
|
.output()
|
|
|
|
.unwrap_or_else(|e| panic!("failed to execute process: {}", e))
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let sysroot = env::var("RUST_SYSROOT").expect("env variable `RUST_SYSROOT` not set");
|
|
|
|
let test_run = run_miri("src/bin/miri.rs", &sysroot);
|
|
|
|
|
|
|
|
if test_run.status.code().unwrap_or(-1) != 0 {
|
|
|
|
println!("{}", String::from_utf8(test_run.stdout).unwrap());
|
|
|
|
panic!("{}", String::from_utf8(test_run.stderr).unwrap());
|
|
|
|
}
|
|
|
|
}
|