#![feature(rustc_private)]
-extern crate env_logger;
-extern crate getopts;
-#[macro_use]
-extern crate log;
-extern crate log_settings;
-extern crate miri;
-extern crate rustc;
+extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_hir;
extern crate rustc_interface;
use std::str::FromStr;
use hex::FromHexError;
+use log::debug;
use rustc_session::CtfeBacktrace;
use rustc_driver::Compilation;
use rustc_hir::def_id::LOCAL_CRATE;
use rustc_interface::{interface, Queries};
-use rustc::ty::TyCtxt;
+use rustc_middle::ty::TyCtxt;
struct MiriCompilerCalls {
miri_config: miri::MiriConfig,
// Add filename to `miri` arguments.
config.args.insert(0, compiler.input().filestem().to_string());
- if let Some(return_code) = miri::eval_main(tcx, entry_def_id, config) {
+ if let Some(return_code) = miri::eval_main(tcx, entry_def_id.to_def_id(), config) {
std::process::exit(
i32::try_from(return_code).expect("Return value was too large!"),
);
if log::Level::from_str(&var).is_ok() {
env::set_var(
"RUSTC_LOG",
- &format!("rustc::mir::interpret={0},rustc_mir::interpret={0}", var),
+ &format!("rustc_middle::mir::interpret={0},rustc_mir::interpret={0}", var),
);
} else {
env::set_var("RUSTC_LOG", &var);
// Parse our arguments and split them across `rustc` and `miri`.
let mut validate = true;
let mut stacked_borrows = true;
+ let mut check_alignment = true;
let mut communicate = false;
let mut ignore_leaks = false;
let mut seed: Option<u64> = None;
"-Zmiri-disable-stacked-borrows" => {
stacked_borrows = false;
}
+ "-Zmiri-disable-alignment-check" => {
+ check_alignment = false;
+ }
"-Zmiri-disable-isolation" => {
communicate = true;
}
let miri_config = miri::MiriConfig {
validate,
stacked_borrows,
+ check_alignment,
communicate,
ignore_leaks,
excluded_env_vars,
rustc_driver::run_compiler(&rustc_args, &mut MiriCompilerCalls { miri_config }, None, None)
})
.and_then(|result| result);
- std::process::exit(result.is_err() as i32);
+ let exit_code = match result {
+ Ok(()) => rustc_driver::EXIT_SUCCESS,
+ Err(_) => rustc_driver::EXIT_FAILURE,
+ };
+ std::process::exit(exit_code);
}