ccd2c403ac
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.
30 lines
1.1 KiB
Rust
30 lines
1.1 KiB
Rust
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
#![feature(rustc_private)]
|
|
#![feature(link_args)]
|
|
|
|
// Set the stack size at link time on Windows. See rustc_driver::in_rustc_thread
|
|
// for the rationale.
|
|
#[allow(unused_attributes)]
|
|
#[cfg_attr(all(windows, target_env = "msvc"), link_args = "/STACK:16777216")]
|
|
// We only build for msvc and gnu now, but we use a exhaustive condition here
|
|
// so we can expect either the stack size to be set or the build fails.
|
|
#[cfg_attr(all(windows, not(target_env = "msvc")), link_args = "-Wl,--stack,16777216")]
|
|
// Also, don't forget to set this for rustdoc.
|
|
extern {}
|
|
|
|
extern crate rustc_driver;
|
|
|
|
fn main() {
|
|
rustc_driver::set_sigpipe_handler();
|
|
rustc_driver::main()
|
|
}
|