* `-Zmiri-disable-isolation` disables host host isolation. As a consequence,
the program has access to host resources such as environment variables and
randomness (and, eventually, file systems and more).
+* `-Zmiri-env-exclude=<var>` keeps the `var` environment variable isolated from
+ the host. It can be used multiple times to exclude several variables.
* `-Zmir-opt-level` controls how many MIR optimizations are performed. Miri
overrides the default to be `0`; be advised that using any higher level can
make Miri miss bugs in your program because they got optimized away.
let mut rustc_args = vec![];
let mut miri_args = vec![];
let mut after_dashdash = false;
+ let mut excluded_env_vars = vec![];
for arg in std::env::args() {
if rustc_args.is_empty() {
// Very first arg: for `rustc`.
seed = Some(u64::from_be_bytes(bytes));
},
+ arg if arg.starts_with("-Zmiri-env-exclude=") => {
+ excluded_env_vars.push(arg.trim_start_matches("-Zmiri-env-exclude=").to_owned());
+ },
_ => {
rustc_args.push(arg);
}
debug!("rustc arguments: {:?}", rustc_args);
debug!("miri arguments: {:?}", miri_args);
- let miri_config = miri::MiriConfig { validate, communicate, args: miri_args, seed };
+ let miri_config = miri::MiriConfig {
+ validate,
+ communicate,
+ excluded_env_vars,
+ seed,
+ args: miri_args,
+ };
let result = rustc_driver::report_ices_to_stderr_if_any(move || {
rustc_driver::run_compiler(&rustc_args, &mut MiriCompilerCalls { miri_config }, None, None)
}).and_then(|result| result);
pub validate: bool,
/// Determines if communication with the host environment is enabled.
pub communicate: bool,
+ /// Environment variables that should always be isolated from the host.
+ pub excluded_env_vars: Vec<String>,
pub args: Vec<String>,
/// The seed to use when non-determinism or randomness are required (e.g. ptr-to-int cast, `getrandom()`).
pub seed: Option<u64>,