// 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!"),
);
// 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::install_ice_hook();
let result = rustc_driver::catch_fatal_errors(move || {
rustc_driver::run_compiler(&rustc_args, &mut MiriCompilerCalls { miri_config }, None, None)
- });
- std::process::exit(result.is_err() as i32);
+ })
+ .and_then(|result| result);
+ let exit_code = match result {
+ Ok(()) => rustc_driver::EXIT_SUCCESS,
+ Err(_) => rustc_driver::EXIT_FAILURE,
+ };
+ std::process::exit(exit_code);
}