Skip to content

Commit 402b3c6

Browse files
committed
add MIRIFLAGS env var to set Miri's flags; make cargo-miri test suite pass again
1 parent 2091c16 commit 402b3c6

File tree

3 files changed

+31
-22
lines changed

3 files changed

+31
-22
lines changed

cargo-miri/bin.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ fn phase_cargo_rustc(args: env::ArgsOs) {
503503
}
504504
}
505505
cmd.arg(format!("{}={}", emit_flag, val.join(",")));
506+
// FIXME: due to this, the `.rlib` file does not get created and cargo re-triggers the build each time.
506507
} else {
507508
cmd.arg(arg);
508509
}
@@ -541,13 +542,13 @@ fn phase_cargo_runner(binary: &OsStr, binary_args: env::ArgsOs) {
541542
.unwrap_or_else(|_| show_error(format!("Unable to remove file {:?}", binary)));
542543

543544
let mut cmd = miri();
544-
// Forward rustc arguments, with our sysroot. We need to patch "--extern" filenames because
545+
// Forward rustc arguments. We need to patch "--extern" filenames because
545546
// we forced a check-only build without cargo knowing about that: replace `.rlib` suffix by `.rmeta`.
546547
let mut args = info.args.into_iter();
547548
let extern_flag = "--extern";
548549
while let Some(arg) = args.next() {
549550
if arg.to_str() == Some(extern_flag) {
550-
let next_arg = args.next().expect("`--extern` shoulw be followed by a filename");
551+
let next_arg = args.next().expect("`--extern` should be followed by a filename");
551552
let next_arg = next_arg.to_str().expect("Cannot work with non-UTF-8 extern filenames");
552553
let next_arg = next_arg.strip_suffix(".rlib").expect("all extern filenames should end in `.rlib`");
553554
cmd.arg(extern_flag);
@@ -556,10 +557,21 @@ fn phase_cargo_runner(binary: &OsStr, binary_args: env::ArgsOs) {
556557
cmd.arg(arg);
557558
}
558559
}
560+
// Set sysroot.
559561
let sysroot =
560562
env::var_os("MIRI_SYSROOT").expect("The wrapper should have set MIRI_SYSROOT");
561563
cmd.arg("--sysroot");
562564
cmd.arg(sysroot);
565+
// Respect `MIRIFLAGS`.
566+
if let Ok(a) = env::var("MIRIFLAGS") {
567+
// This code is taken from `RUSTFLAGS` handling in cargo.
568+
let args = a
569+
.split(' ')
570+
.map(str::trim)
571+
.filter(|s| !s.is_empty())
572+
.map(str::to_string);
573+
cmd.args(args);
574+
}
563575

564576
// Then pass binary arguments.
565577
cmd.arg("--");

test-cargo-miri/run-test.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@ def cargo_miri(cmd):
2121
args += ["--target", os.environ['MIRI_TEST_TARGET']]
2222
return args
2323

24-
def test(name, cmd, stdout_ref, stderr_ref):
24+
def test(name, cmd, stdout_ref, stderr_ref, env={}):
2525
print("==> Testing `{}` <==".format(name))
2626
## Call `cargo miri`, capture all output
27+
p_env = os.environ.copy()
28+
p_env.update(env)
2729
p = subprocess.Popen(
2830
cmd,
2931
stdout=subprocess.PIPE,
30-
stderr=subprocess.PIPE
32+
stderr=subprocess.PIPE,
33+
env=p_env,
3134
)
3235
(stdout, stderr) = p.communicate()
3336
stdout = stdout.decode("UTF-8")
@@ -55,29 +58,31 @@ def test_cargo_miri_run():
5558
"stdout.ref", "stderr.ref"
5659
)
5760
test("cargo miri run (with arguments)",
58-
cargo_miri("run") + ["--", "--", "hello world", '"hello world"'],
61+
cargo_miri("run") + ["--", "hello world", '"hello world"'],
5962
"stdout.ref", "stderr.ref2"
6063
)
6164

6265
def test_cargo_miri_test():
6366
test("cargo miri test",
64-
cargo_miri("test") + ["--", "-Zmiri-seed=feed"],
65-
"test.stdout.ref", "test.stderr.ref"
67+
cargo_miri("test"),
68+
"test.stdout.ref", "test.stderr.ref",
69+
env={'MIRIFLAGS': "-Zmiri-seed=feed"},
6670
)
6771
test("cargo miri test (with filter)",
68-
cargo_miri("test") + ["--", "--", "le1"],
72+
cargo_miri("test") + ["--", "--format=pretty", "le1"],
6973
"test.stdout.ref2", "test.stderr.ref"
7074
)
7175
test("cargo miri test (without isolation)",
72-
cargo_miri("test") + ["--", "-Zmiri-disable-isolation", "--", "num_cpus"],
73-
"test.stdout.ref3", "test.stderr.ref"
76+
cargo_miri("test") + ["--", "--format=pretty", "num_cpus"],
77+
"test.stdout.ref3", "test.stderr.ref",
78+
env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
7479
)
7580
test("cargo miri test (test target)",
76-
cargo_miri("test") + ["--test", "test"],
81+
cargo_miri("test") + ["--test", "test", "--", "--format=pretty"],
7782
"test.stdout.ref4", "test.stderr.ref"
7883
)
7984
test("cargo miri test (bin target)",
80-
cargo_miri("test") + ["--bin", "cargo-miri-test"],
85+
cargo_miri("test") + ["--bin", "cargo-miri-test", "--", "--format=pretty"],
8186
"test.stdout.ref5", "test.stderr.ref"
8287
)
8388

test-cargo-miri/test.stdout.ref

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11

22
running 1 test
3-
test test::rng ... ok
4-
3+
.
54
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
65

76

87
running 7 tests
9-
test do_panic ... ok
10-
test does_not_work_on_miri ... ignored
11-
test entropy_rng ... ok
12-
test fail_index_check ... ok
13-
test num_cpus ... ok
14-
test simple1 ... ok
15-
test simple2 ... ok
16-
8+
.i.....
179
test result: ok. 6 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out
1810

0 commit comments

Comments
 (0)