Skip to content

Commit fcdd36a

Browse files
committed
Use untracked env var to pass -Zon-broken-pipe=kill for tools
- Don't touch rustc's `-Zon-broken-pipe=kill` env var in `compile.rs`. - Use an untracked env var to pass `-Zon-broken-pipe=kill` for tools but skip cargo still, because cargo wants `-Zon-broken-pipe=kill` unset.
1 parent 2305aad commit fcdd36a

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

src/bootstrap/src/bin/rustc.rs

+4
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ fn main() {
137137
cmd.args(lint_flags.split_whitespace());
138138
}
139139

140+
if let Ok(flags) = env::var("UNTRACKED_BROKEN_PIPE_FLAG") {
141+
cmd.args(flags.split_whitespace());
142+
}
143+
140144
if target.is_some() {
141145
// The stage0 compiler has a special sysroot distinct from what we
142146
// actually downloaded, so we just always pass the `--sysroot` option,

src/bootstrap/src/core/build_steps/compile.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1053,8 +1053,10 @@ pub fn rustc_cargo(
10531053

10541054
cargo.rustdocflag("-Zcrate-attr=warn(rust_2018_idioms)");
10551055

1056-
// If the rustc output is piped to e.g. `head -n1` we want the process to be
1057-
// killed, rather than having an error bubble up and cause a panic.
1056+
// If the rustc output is piped to e.g. `head -n1` we want the process to be killed, rather than
1057+
// having an error bubble up and cause a panic.
1058+
// NOTE(jieyouxu): this flag is load-bearing for rustc to not ICE on broken pipes.
1059+
// See <https://github.com/rust-lang/rust/issues/131059> for details.
10581060
cargo.rustflag("-Zon-broken-pipe=kill");
10591061

10601062
if builder.config.llvm_enzyme {

src/bootstrap/src/core/build_steps/tool.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,12 @@ pub fn prepare_tool_cargo(
209209
// See https://github.com/rust-lang/rust/issues/116538
210210
cargo.rustflag("-Zunstable-options");
211211

212-
// `-Zon-broken-pipe=kill` breaks cargo tests
212+
// cargo explicitly does not want `-Zon-broken-pipe=kill` semantics, and thankfully cargo tests
213+
// will break if we do set the flag. We use a special env var here that is not part of
214+
// `RUSTFLAGS` tracked by cargo as that can cause unnecessary tool rebuilds due to tool build
215+
// cache invalidation.
213216
if !path.ends_with("cargo") {
214-
// If the output is piped to e.g. `head -n1` we want the process to be killed,
215-
// rather than having an error bubble up and cause a panic.
216-
cargo.rustflag("-Zon-broken-pipe=kill");
217+
cargo.env("UNTRACKED_BROKEN_PIPE_FLAG", "-Zon-broken-pipe=kill");
217218
}
218219

219220
cargo

0 commit comments

Comments
 (0)