diff options
| author | kennytm <kennytm@gmail.com> | 2018-04-17 01:50:58 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-17 01:50:58 +0800 |
| commit | ccd2c403ac6d1b92c49985d09c4b1d0af8f651e1 (patch) | |
| tree | 71a311ffb2516522446b559562f932678591696e /src/rustc | |
| parent | bf602952116262f261eec20a2dc085d915de7bc7 (diff) | |
| parent | 7ab31f6556c2cce433695b113f53d6275edd724d (diff) | |
Rollup merge of #49606 - varkor:pipe-repair, r=alexcrichton
Prevent broken pipes causing ICEs As the private `std::io::print_to` panics if there is an I/O error, which is used by `println!`, the compiler would ICE if one attempted to use a broken pipe (e.g. `rustc --help | false`). This introduces a new (private) macro `try_println!` which allows us to avoid this. As a side note, it seems this macro might be useful publicly (and actually there seems to be [a crate specifically for this purpose](https://crates.io/crates/try_print/)), though that can probably be left for a future discussion. One slight alternative approach would be to simply early exit without an error (i.e. exit code `0`), which [this comment](https://github.com/rust-lang/rust/issues/34376#issuecomment-377822526) suggests is the usual approach. I've opted not to take that approach initially, because I think it's more helpful to know when there is a broken pipe. Fixes #34376.
Diffstat (limited to 'src/rustc')
| -rw-r--r-- | src/rustc/rustc.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/rustc/rustc.rs b/src/rustc/rustc.rs index a888838ce43..ab5a7c3f747 100644 --- a/src/rustc/rustc.rs +++ b/src/rustc/rustc.rs @@ -23,4 +23,7 @@ extern {} extern crate rustc_driver; -fn main() { rustc_driver::main() } +fn main() { + rustc_driver::set_sigpipe_handler(); + rustc_driver::main() +} |
