diff --git a/cargo-miri/bin.rs b/cargo-miri/bin.rs index 295acd6638..7836b26ea5 100644 --- a/cargo-miri/bin.rs +++ b/cargo-miri/bin.rs @@ -900,10 +900,17 @@ fn phase_rustdoc(fst_arg: &str, mut args: env::Args) { } if crossmode { - show_error(format!("cross-interpreting doc-tests is not currently supported by Miri.")); + show_error(format!("cross-interpreting doctests is not currently supported by Miri.")); } - // For each doc-test, rustdoc starts two child processes: first the test is compiled, + // Doctests of `proc-macro` crates (and their dependencies) are always built for the host, + // so we are not able to run them in Miri. + if ArgFlagValueIter::new("--crate-type").any(|crate_type| crate_type == "proc-macro") { + eprintln!("Running doctests of `proc-macro` crates is not currently supported by Miri."); + return; + } + + // For each doctest, rustdoc starts two child processes: first the test is compiled, // then the produced executable is invoked. We want to reroute both of these to cargo-miri, // such that the first time we'll enter phase_cargo_rustc, and phase_cargo_runner second. // diff --git a/test-cargo-miri/run-test.py b/test-cargo-miri/run-test.py index 9185c2507b..c850e7d145 100755 --- a/test-cargo-miri/run-test.py +++ b/test-cargo-miri/run-test.py @@ -140,6 +140,10 @@ def test_cargo_miri_test(): "test.subcrate.stdout.ref", "test.stderr-proc-macro.ref", env={'MIRIFLAGS': "-Zmiri-disable-isolation"}, ) + test("`cargo miri test` (subcrate, doctests)", + cargo_miri("test") + ["-p", "subcrate", "--doc"], + "test.stdout-empty.ref", "test.stderr-proc-macro-doctest.ref", + ) os.chdir(os.path.dirname(os.path.realpath(__file__))) os.environ["RUST_TEST_NOCAPTURE"] = "0" # this affects test output, so make sure it is not set diff --git a/test-cargo-miri/subcrate/src/lib.rs b/test-cargo-miri/subcrate/src/lib.rs index 706e368017..2ccb6704b0 100644 --- a/test-cargo-miri/subcrate/src/lib.rs +++ b/test-cargo-miri/subcrate/src/lib.rs @@ -1,2 +1,5 @@ +#[cfg(doctest)] +compile_error!("rustdoc should not touch me"); + #[cfg(test)] compile_error!("Miri should not touch me"); diff --git a/test-cargo-miri/test.stderr-proc-macro-doctest.ref b/test-cargo-miri/test.stderr-proc-macro-doctest.ref new file mode 100644 index 0000000000..ca5e3a2392 --- /dev/null +++ b/test-cargo-miri/test.stderr-proc-macro-doctest.ref @@ -0,0 +1 @@ +Running doctests of `proc-macro` crates is not currently supported by Miri. diff --git a/test-cargo-miri/test.stdout-empty.ref b/test-cargo-miri/test.stdout-empty.ref new file mode 100644 index 0000000000..e69de29bb2