summaryrefslogtreecommitdiffstats
path: root/tests/ui/panics
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:42 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 02:49:42 +0000
commit837b550238aa671a591ccf282dddeab29cadb206 (patch)
tree914b6b8862bace72bd3245ca184d374b08d8a672 /tests/ui/panics
parentAdding debian version 1.70.0+dfsg2-1. (diff)
downloadrustc-837b550238aa671a591ccf282dddeab29cadb206.tar.xz
rustc-837b550238aa671a591ccf282dddeab29cadb206.zip
Merging upstream version 1.71.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/panics')
-rw-r--r--tests/ui/panics/default-backtrace-ice.rs14
-rw-r--r--tests/ui/panics/default-backtrace-ice.stderr7
-rw-r--r--tests/ui/panics/fmt-only-once.rs21
-rw-r--r--tests/ui/panics/fmt-only-once.run.stderr3
-rw-r--r--tests/ui/panics/nested_panic_caught.rs24
-rw-r--r--tests/ui/panics/panic-short-backtrace-windows-x86_64.rs2
-rw-r--r--tests/ui/panics/short-ice-remove-middle-frames-2.rs61
-rw-r--r--tests/ui/panics/short-ice-remove-middle-frames-2.run.stderr11
-rw-r--r--tests/ui/panics/short-ice-remove-middle-frames.rs57
-rw-r--r--tests/ui/panics/short-ice-remove-middle-frames.run.stderr12
10 files changed, 210 insertions, 2 deletions
diff --git a/tests/ui/panics/default-backtrace-ice.rs b/tests/ui/panics/default-backtrace-ice.rs
index fd86a3f9d..b40203c33 100644
--- a/tests/ui/panics/default-backtrace-ice.rs
+++ b/tests/ui/panics/default-backtrace-ice.rs
@@ -2,8 +2,20 @@
// compile-flags:-Z treat-err-as-bug=1
// error-pattern:stack backtrace:
// failure-status:101
+// ignore-msvc
// normalize-stderr-test "note: .*" -> ""
// normalize-stderr-test "thread 'rustc' .*" -> ""
-// normalize-stderr-test " .*\n" -> ""
+// normalize-stderr-test " +\d+:.*__rust_begin_short_backtrace.*" -> "(begin_short_backtrace)"
+// normalize-stderr-test " +\d+:.*__rust_end_short_backtrace.*" -> "(end_short_backtrace)"
+// normalize-stderr-test " +\d+:.*\n" -> ""
+// normalize-stderr-test " +at .*\n" -> ""
+//
+// This test makes sure that full backtraces are used for ICEs when
+// RUST_BACKTRACE is not set. It does this by checking for the presence of
+// `__rust_{begin,end}_short_backtrace` markers, which only appear in full
+// backtraces. The rest of the backtrace is filtered out.
+//
+// Ignored on msvc becaue the `__rust_{begin,end}_short_backtrace` symbols
+// aren't reliable.
fn main() { missing_ident; }
diff --git a/tests/ui/panics/default-backtrace-ice.stderr b/tests/ui/panics/default-backtrace-ice.stderr
index 4bd4780e2..815ce4dd0 100644
--- a/tests/ui/panics/default-backtrace-ice.stderr
+++ b/tests/ui/panics/default-backtrace-ice.stderr
@@ -1,8 +1,15 @@
error[E0425]: cannot find value `missing_ident` in this scope
+ --> $DIR/default-backtrace-ice.rs:21:13
+ |
LL | fn main() { missing_ident; }
+ | ^^^^^^^^^^^^^ not found in this scope
stack backtrace:
+(end_short_backtrace)
+(begin_short_backtrace)
+(end_short_backtrace)
+(begin_short_backtrace)
error: the compiler unexpectedly panicked. this is a bug.
diff --git a/tests/ui/panics/fmt-only-once.rs b/tests/ui/panics/fmt-only-once.rs
new file mode 100644
index 000000000..6211bf961
--- /dev/null
+++ b/tests/ui/panics/fmt-only-once.rs
@@ -0,0 +1,21 @@
+// run-fail
+// check-run-results
+// exec-env:RUST_BACKTRACE=0
+
+// Test that we format the panic message only once.
+// Regression test for https://github.com/rust-lang/rust/issues/110717
+
+use std::fmt;
+
+struct PrintOnFmt;
+
+impl fmt::Display for PrintOnFmt {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ eprintln!("fmt");
+ f.write_str("PrintOnFmt")
+ }
+}
+
+fn main() {
+ panic!("{}", PrintOnFmt)
+}
diff --git a/tests/ui/panics/fmt-only-once.run.stderr b/tests/ui/panics/fmt-only-once.run.stderr
new file mode 100644
index 000000000..39bd06881
--- /dev/null
+++ b/tests/ui/panics/fmt-only-once.run.stderr
@@ -0,0 +1,3 @@
+fmt
+thread 'main' panicked at 'PrintOnFmt', $DIR/fmt-only-once.rs:20:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/tests/ui/panics/nested_panic_caught.rs b/tests/ui/panics/nested_panic_caught.rs
new file mode 100644
index 000000000..d43886e80
--- /dev/null
+++ b/tests/ui/panics/nested_panic_caught.rs
@@ -0,0 +1,24 @@
+// run-pass
+// needs-unwind
+
+// Checks that nested panics work correctly.
+
+use std::panic::catch_unwind;
+
+fn double() {
+ struct Double;
+
+ impl Drop for Double {
+ fn drop(&mut self) {
+ let _ = catch_unwind(|| panic!("twice"));
+ }
+ }
+
+ let _d = Double;
+
+ panic!("once");
+}
+
+fn main() {
+ assert!(catch_unwind(|| double()).is_err());
+}
diff --git a/tests/ui/panics/panic-short-backtrace-windows-x86_64.rs b/tests/ui/panics/panic-short-backtrace-windows-x86_64.rs
index 39ffe86dd..be83eb748 100644
--- a/tests/ui/panics/panic-short-backtrace-windows-x86_64.rs
+++ b/tests/ui/panics/panic-short-backtrace-windows-x86_64.rs
@@ -1,6 +1,6 @@
// This test has been spuriously failing a lot recently (#92000).
// Ignore it until the underlying issue is fixed.
-// ignore-test
+// ignore-test (#92000)
// Regression test for #87481: short backtrace formatting cut off the entire stack trace.
diff --git a/tests/ui/panics/short-ice-remove-middle-frames-2.rs b/tests/ui/panics/short-ice-remove-middle-frames-2.rs
new file mode 100644
index 000000000..38a80f8b6
--- /dev/null
+++ b/tests/ui/panics/short-ice-remove-middle-frames-2.rs
@@ -0,0 +1,61 @@
+// compile-flags:-Cstrip=none
+// run-fail
+// check-run-results
+// exec-env:RUST_BACKTRACE=1
+// ignore-android FIXME #17520
+// ignore-wasm no panic support
+// ignore-openbsd no support for libbacktrace without filename
+// ignore-emscripten no panic
+// ignore-sgx Backtraces not symbolized
+// ignore-fuchsia Backtraces not symbolized
+// ignore-msvc the `__rust_{begin,end}_short_backtrace` symbols aren't reliable.
+
+/// This test case make sure that we can have multiple pairs of `__rust_{begin,end}_short_backtrace`
+
+#[inline(never)]
+fn __rust_begin_short_backtrace<T, F: FnOnce() -> T>(f: F) -> T {
+ let result = f();
+ std::hint::black_box(result)
+}
+
+#[inline(never)]
+fn __rust_end_short_backtrace<T, F: FnOnce() -> T>(f: F) -> T {
+ let result = f();
+ std::hint::black_box(result)
+}
+
+fn first() {
+ __rust_end_short_backtrace(|| second());
+}
+
+fn second() {
+ third(); // won't show up
+}
+
+fn third() {
+ fourth(); // won't show up
+}
+
+fn fourth() {
+ __rust_begin_short_backtrace(|| fifth());
+}
+
+fn fifth() {
+ __rust_end_short_backtrace(|| sixth());
+}
+
+fn sixth() {
+ seven(); // won't show up
+}
+
+fn seven() {
+ __rust_begin_short_backtrace(|| eight());
+}
+
+fn eight() {
+ panic!("debug!!!");
+}
+
+fn main() {
+ first();
+}
diff --git a/tests/ui/panics/short-ice-remove-middle-frames-2.run.stderr b/tests/ui/panics/short-ice-remove-middle-frames-2.run.stderr
new file mode 100644
index 000000000..2592b7479
--- /dev/null
+++ b/tests/ui/panics/short-ice-remove-middle-frames-2.run.stderr
@@ -0,0 +1,11 @@
+thread 'main' panicked at 'debug!!!', $DIR/short-ice-remove-middle-frames-2.rs:56:5
+stack backtrace:
+ 0: std::panicking::begin_panic
+ 1: short_ice_remove_middle_frames_2::eight
+ 2: short_ice_remove_middle_frames_2::seven::{{closure}}
+ 3: short_ice_remove_middle_frames_2::fifth
+ 4: short_ice_remove_middle_frames_2::fourth::{{closure}}
+ 5: short_ice_remove_middle_frames_2::first
+ 6: short_ice_remove_middle_frames_2::main
+ 7: core::ops::function::FnOnce::call_once
+note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
diff --git a/tests/ui/panics/short-ice-remove-middle-frames.rs b/tests/ui/panics/short-ice-remove-middle-frames.rs
new file mode 100644
index 000000000..c872084f0
--- /dev/null
+++ b/tests/ui/panics/short-ice-remove-middle-frames.rs
@@ -0,0 +1,57 @@
+// compile-flags:-Cstrip=none
+// run-fail
+// check-run-results
+// exec-env:RUST_BACKTRACE=1
+// ignore-android FIXME #17520
+// ignore-wasm no panic support
+// ignore-openbsd no support for libbacktrace without filename
+// ignore-emscripten no panic
+// ignore-sgx Backtraces not symbolized
+// ignore-fuchsia Backtraces not symbolized
+// ignore-msvc the `__rust_{begin,end}_short_backtrace` symbols aren't reliable.
+
+
+#[inline(never)]
+fn __rust_begin_short_backtrace<T, F: FnOnce() -> T>(f: F) -> T {
+ let result = f();
+ std::hint::black_box(result)
+}
+
+#[inline(never)]
+fn __rust_end_short_backtrace<T, F: FnOnce() -> T>(f: F) -> T {
+ let result = f();
+ std::hint::black_box(result)
+}
+
+fn first() {
+ __rust_end_short_backtrace(|| second());
+ // do not take effect since we already has a inner call of __rust_end_short_backtrace
+}
+
+fn second() {
+ __rust_end_short_backtrace(|| third());
+}
+
+fn third() {
+ fourth(); // won't show up in backtrace
+}
+
+fn fourth() {
+ fifth(); // won't show up in backtrace
+}
+
+fn fifth() {
+ __rust_begin_short_backtrace(|| sixth());
+}
+
+fn sixth() {
+ seven();
+}
+
+fn seven() {
+ panic!("debug!!!");
+}
+
+fn main() {
+ first();
+}
diff --git a/tests/ui/panics/short-ice-remove-middle-frames.run.stderr b/tests/ui/panics/short-ice-remove-middle-frames.run.stderr
new file mode 100644
index 000000000..9c15f2e08
--- /dev/null
+++ b/tests/ui/panics/short-ice-remove-middle-frames.run.stderr
@@ -0,0 +1,12 @@
+thread 'main' panicked at 'debug!!!', $DIR/short-ice-remove-middle-frames.rs:52:5
+stack backtrace:
+ 0: std::panicking::begin_panic
+ 1: short_ice_remove_middle_frames::seven
+ 2: short_ice_remove_middle_frames::sixth
+ 3: short_ice_remove_middle_frames::fifth::{{closure}}
+ 4: short_ice_remove_middle_frames::second
+ 5: short_ice_remove_middle_frames::first::{{closure}}
+ 6: short_ice_remove_middle_frames::first
+ 7: short_ice_remove_middle_frames::main
+ 8: core::ops::function::FnOnce::call_once
+note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.