Auto merge of #1726 - hyd-dev:stub-d, r=RalfJung
cargo-miri: create stub .d files Thanks `@RalfJung` for the discovery: https://github.com/rust-lang/miri/issues/1724#issuecomment-787115693 ❤️ Fixes #1724.
This commit is contained in:
commit
39ebb079a8
@ -609,6 +609,15 @@ fn phase_cargo_rustc(mut args: env::Args) {
|
|||||||
let print = get_arg_flag_value("--print").is_some(); // whether this is cargo passing `--print` to get some infos
|
let print = get_arg_flag_value("--print").is_some(); // whether this is cargo passing `--print` to get some infos
|
||||||
|
|
||||||
let store_json = |info: CrateRunInfo| {
|
let store_json = |info: CrateRunInfo| {
|
||||||
|
// Create a stub .d file to stop Cargo from "rebuilding" the crate:
|
||||||
|
// https://github.com/rust-lang/miri/issues/1724#issuecomment-787115693
|
||||||
|
// As we store a JSON file instead of building the crate here, an empty file is fine.
|
||||||
|
let dep_info_name = out_filename("", ".d");
|
||||||
|
if verbose {
|
||||||
|
eprintln!("[cargo-miri rustc] writing stub dep-info to `{}`", dep_info_name.display());
|
||||||
|
}
|
||||||
|
File::create(dep_info_name).expect("failed to create fake .d file");
|
||||||
|
|
||||||
let filename = out_filename("", "");
|
let filename = out_filename("", "");
|
||||||
if verbose {
|
if verbose {
|
||||||
eprintln!("[cargo-miri rustc] writing run info to `{}`", filename.display());
|
eprintln!("[cargo-miri rustc] writing run info to `{}`", filename.display());
|
||||||
|
@ -50,12 +50,15 @@ def test(name, cmd, stdout_ref, stderr_ref, stdin=b'', env={}):
|
|||||||
print("--- END stderr ---")
|
print("--- END stderr ---")
|
||||||
fail("exit code was {}".format(p.returncode))
|
fail("exit code was {}".format(p.returncode))
|
||||||
|
|
||||||
def test_no_rebuild(name, cmd):
|
def test_no_rebuild(name, cmd, env={}):
|
||||||
print("Testing {}...".format(name))
|
print("Testing {}...".format(name))
|
||||||
|
p_env = os.environ.copy()
|
||||||
|
p_env.update(env)
|
||||||
p = subprocess.Popen(
|
p = subprocess.Popen(
|
||||||
cmd,
|
cmd,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
|
env=p_env,
|
||||||
)
|
)
|
||||||
(stdout, stderr) = p.communicate()
|
(stdout, stderr) = p.communicate()
|
||||||
stdout = stdout.decode("UTF-8")
|
stdout = stdout.decode("UTF-8")
|
||||||
@ -79,6 +82,12 @@ def test_cargo_miri_run():
|
|||||||
'MIRITESTVAR': "wrongval", # make sure the build.rs value takes precedence
|
'MIRITESTVAR': "wrongval", # make sure the build.rs value takes precedence
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
# Special test: run it again *without* `-q` to make sure nothing is being rebuilt (Miri issue #1722)
|
||||||
|
test_no_rebuild("`cargo miri run` (no rebuild)",
|
||||||
|
cargo_miri("run", quiet=False) + ["--", ""],
|
||||||
|
env={'MIRITESTVAR': "wrongval"}, # changing the env var causes a rebuild (re-runs build.rs),
|
||||||
|
# so keep it set
|
||||||
|
)
|
||||||
test("`cargo miri run` (with arguments and target)",
|
test("`cargo miri run` (with arguments and target)",
|
||||||
cargo_miri("run") + ["--bin", "cargo-miri-test", "--", "hello world", '"hello world"'],
|
cargo_miri("run") + ["--bin", "cargo-miri-test", "--", "hello world", '"hello world"'],
|
||||||
"run.args.stdout.ref", "run.args.stderr.ref",
|
"run.args.stdout.ref", "run.args.stderr.ref",
|
||||||
@ -88,12 +97,6 @@ def test_cargo_miri_run():
|
|||||||
"run.subcrate.stdout.ref", "run.subcrate.stderr.ref",
|
"run.subcrate.stdout.ref", "run.subcrate.stderr.ref",
|
||||||
env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
|
env={'MIRIFLAGS': "-Zmiri-disable-isolation"},
|
||||||
)
|
)
|
||||||
# Special test: run it again *without* `-q` to make sure nothing is being rebuilt (Miri issue #1722)
|
|
||||||
# FIXME: move this test up to right after the first `test`
|
|
||||||
# (currently that fails, only the 3rd and later runs are really clean... see Miri issue #1722)
|
|
||||||
test_no_rebuild("`cargo miri run` (no rebuild)",
|
|
||||||
cargo_miri("run", quiet=False) + ["--", ""],
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_cargo_miri_test():
|
def test_cargo_miri_test():
|
||||||
# rustdoc is not run on foreign targets
|
# rustdoc is not run on foreign targets
|
||||||
|
Loading…
x
Reference in New Issue
Block a user