summaryrefslogtreecommitdiffstats
path: root/tests/ui/process
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:35 +0000
commitd1b2d29528b7794b41e66fc2136e395a02f8529b (patch)
treea4a17504b260206dec3cf55b2dca82929a348ac2 /tests/ui/process
parentReleasing progress-linux version 1.72.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.tar.xz
rustc-d1b2d29528b7794b41e66fc2136e395a02f8529b.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/process')
-rw-r--r--tests/ui/process/multi-panic.rs4
-rw-r--r--tests/ui/process/println-with-broken-pipe.rs44
-rw-r--r--tests/ui/process/println-with-broken-pipe.run.stderr3
-rw-r--r--tests/ui/process/println-with-broken-pipe.run.stdout1
4 files changed, 51 insertions, 1 deletions
diff --git a/tests/ui/process/multi-panic.rs b/tests/ui/process/multi-panic.rs
index a1887c218..c240dc18f 100644
--- a/tests/ui/process/multi-panic.rs
+++ b/tests/ui/process/multi-panic.rs
@@ -8,10 +8,12 @@ fn check_for_no_backtrace(test: std::process::Output) {
let err = String::from_utf8_lossy(&test.stderr);
let mut it = err.lines();
- assert_eq!(it.next().map(|l| l.starts_with("thread '<unnamed>' panicked at")), Some(true));
+ assert_eq!(it.next().map(|l| l.starts_with("thread '<unnamed>' panicked")), Some(true));
+ assert_eq!(it.next().is_some(), true);
assert_eq!(it.next(), Some("note: run with `RUST_BACKTRACE=1` \
environment variable to display a backtrace"));
assert_eq!(it.next().map(|l| l.starts_with("thread 'main' panicked at")), Some(true));
+ assert_eq!(it.next().is_some(), true);
assert_eq!(it.next(), None);
}
diff --git a/tests/ui/process/println-with-broken-pipe.rs b/tests/ui/process/println-with-broken-pipe.rs
new file mode 100644
index 000000000..47c590ce2
--- /dev/null
+++ b/tests/ui/process/println-with-broken-pipe.rs
@@ -0,0 +1,44 @@
+// run-pass
+// check-run-results
+// ignore-windows
+// ignore-emscripten
+// ignore-fuchsia
+// ignore-horizon
+// ignore-android
+// normalize-stderr-test ".rs:\d+:\d+" -> ".rs:LL:CC"
+
+// Test what the error message looks like when `println!()` panics because of
+// `std::io::ErrorKind::BrokenPipe`
+
+#![feature(unix_sigpipe)]
+
+use std::env;
+use std::process::{Command, Stdio};
+
+#[unix_sigpipe = "sig_ign"]
+fn main() {
+ let mut args = env::args();
+ let me = args.next().unwrap();
+
+ if let Some(arg) = args.next() {
+ // More than enough iterations to fill any pipe buffer. Normally this
+ // loop will end with a panic more or less immediately.
+ for _ in 0..65536 * 64 {
+ println!("{arg}");
+ }
+ unreachable!("should have panicked because of BrokenPipe");
+ }
+
+ // Set up a pipeline with a short-lived consumer and wait for it to finish.
+ // This will produce the `println!()` panic message on stderr.
+ let mut producer = Command::new(&me)
+ .arg("this line shall appear exactly once on stdout")
+ .env("RUST_BACKTRACE", "0")
+ .stdout(Stdio::piped())
+ .spawn()
+ .unwrap();
+ let mut consumer =
+ Command::new("head").arg("-n1").stdin(producer.stdout.take().unwrap()).spawn().unwrap();
+ consumer.wait().unwrap();
+ producer.wait().unwrap();
+}
diff --git a/tests/ui/process/println-with-broken-pipe.run.stderr b/tests/ui/process/println-with-broken-pipe.run.stderr
new file mode 100644
index 000000000..a334c0ad2
--- /dev/null
+++ b/tests/ui/process/println-with-broken-pipe.run.stderr
@@ -0,0 +1,3 @@
+thread 'main' panicked at library/std/src/io/stdio.rs:LL:CC:
+failed printing to stdout: Broken pipe (os error 32)
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/tests/ui/process/println-with-broken-pipe.run.stdout b/tests/ui/process/println-with-broken-pipe.run.stdout
new file mode 100644
index 000000000..f55c39578
--- /dev/null
+++ b/tests/ui/process/println-with-broken-pipe.run.stdout
@@ -0,0 +1 @@
+this line shall appear exactly once on stdout