about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/tools/miri/src/bin/miri.rs4
-rw-r--r--src/tools/miri/tests/fail/deny_lint.rs8
-rw-r--r--src/tools/miri/tests/fail/deny_lint.stderr12
3 files changed, 23 insertions, 1 deletions
diff --git a/src/tools/miri/src/bin/miri.rs b/src/tools/miri/src/bin/miri.rs
index e4ca40570b7..a77b6e53353 100644
--- a/src/tools/miri/src/bin/miri.rs
+++ b/src/tools/miri/src/bin/miri.rs
@@ -63,7 +63,9 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
         queries: &'tcx rustc_interface::Queries<'tcx>,
     ) -> Compilation {
         queries.global_ctxt().unwrap().enter(|tcx| {
-            tcx.sess.abort_if_errors();
+            if tcx.sess.compile_status().is_err() {
+                tcx.sess.fatal("miri cannot be run on programs that fail compilation");
+            }
 
             init_late_loggers(tcx);
             if !tcx.sess.crate_types().contains(&CrateType::Executable) {
diff --git a/src/tools/miri/tests/fail/deny_lint.rs b/src/tools/miri/tests/fail/deny_lint.rs
new file mode 100644
index 00000000000..a0cb24c51bd
--- /dev/null
+++ b/src/tools/miri/tests/fail/deny_lint.rs
@@ -0,0 +1,8 @@
+//@error-pattern: miri cannot be run on programs that fail compilation
+
+#![deny(warnings)]
+
+struct Foo;
+//~^ ERROR: struct `Foo` is never constructed
+
+fn main() {}
diff --git a/src/tools/miri/tests/fail/deny_lint.stderr b/src/tools/miri/tests/fail/deny_lint.stderr
new file mode 100644
index 00000000000..bb48fcc2038
--- /dev/null
+++ b/src/tools/miri/tests/fail/deny_lint.stderr
@@ -0,0 +1,12 @@
+error: struct `Foo` is never constructed
+  --> $DIR/deny_lint.rs:LL:CC
+   |
+LL | struct Foo;
+   |        ^^^
+   |
+   = note: `-D dead-code` implied by `-D unused`
+
+error: miri cannot be run on programs that fail compilation
+
+error: aborting due to 2 previous errors
+