about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-07-20 09:23:31 -0700
committerAlex Crichton <alex@alexcrichton.com>2015-07-20 09:23:31 -0700
commit013d47b19b25b94e9740f725425bc836bac6efde (patch)
tree3471feb8b88006f8ea76871307ba11b414b54979
parentb5dad7dcb22ed6bf8ebaae56b4339bd64f6983eb (diff)
downloadrust-013d47b19b25b94e9740f725425bc836bac6efde.tar.gz
rust-013d47b19b25b94e9740f725425bc836bac6efde.zip
syntax: Suppress panic message on `fatal`
This commit ensures that the rustc thread does not leak a panic message whenever
a call to `fatal` happens. This already happens for the main rustc thread as
part of the `rustc_driver::monitor` function, but the compiler also spawns
threads for other operations like `-C codegen-units`, and sometimes errors are
emitted on these threads as well. To ensure that there's a consistent
error-handling experience across threads this unifies these two to never print
the panic message in the case of a normal and expected fatal error.

This should also fix the flaky `asm-src-loc-codegen-units.rs` test as the output
is sometimes garbled if diagnostics are printed while the panic message is also
being printed.
-rw-r--r--src/libsyntax/diagnostic.rs4
-rw-r--r--src/libsyntax/lib.rs1
2 files changed, 5 insertions, 0 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs
index fbf015169f8..e95813e44ba 100644
--- a/src/libsyntax/diagnostic.rs
+++ b/src/libsyntax/diagnostic.rs
@@ -208,6 +208,10 @@ impl Handler {
     }
     pub fn fatal(&self, msg: &str) -> ! {
         self.emit.borrow_mut().emit(None, msg, None, Fatal);
+
+        // Suppress the fatal error message from the panic below as we've
+        // already terminated in our own "legitimate" fashion.
+        io::set_panic(Box::new(io::sink()));
         panic!(FatalError);
     }
     pub fn err(&self, msg: &str) {
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index 7333265bdd4..d93af5da13c 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -32,6 +32,7 @@
 #![feature(libc)]
 #![feature(ref_slice)]
 #![feature(rustc_private)]
+#![feature(set_stdio)]
 #![feature(staged_api)]
 #![feature(str_char)]
 #![feature(str_escape)]