提交 247a0d18 编写于 作者: B bors

Auto merge of #27153 - alexcrichton:flaky-tests, r=brson

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.
...@@ -208,6 +208,10 @@ pub fn with_emitter(can_emit_warnings: bool, e: Box<Emitter + Send>) -> Handler ...@@ -208,6 +208,10 @@ pub fn with_emitter(can_emit_warnings: bool, e: Box<Emitter + Send>) -> Handler
} }
pub fn fatal(&self, msg: &str) -> ! { pub fn fatal(&self, msg: &str) -> ! {
self.emit.borrow_mut().emit(None, msg, None, Fatal); 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); panic!(FatalError);
} }
pub fn err(&self, msg: &str) { pub fn err(&self, msg: &str) {
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#![feature(libc)] #![feature(libc)]
#![feature(ref_slice)] #![feature(ref_slice)]
#![feature(rustc_private)] #![feature(rustc_private)]
#![feature(set_stdio)]
#![feature(staged_api)] #![feature(staged_api)]
#![feature(str_char)] #![feature(str_char)]
#![feature(str_escape)] #![feature(str_escape)]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册