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.
This commit is contained in:
parent
b5dad7dcb2
commit
013d47b19b
2 changed files with 5 additions and 0 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#![feature(libc)]
|
||||
#![feature(ref_slice)]
|
||||
#![feature(rustc_private)]
|
||||
#![feature(set_stdio)]
|
||||
#![feature(staged_api)]
|
||||
#![feature(str_char)]
|
||||
#![feature(str_escape)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue