mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
add panic location to 'panicked while processing panic'
This commit is contained in:
parent
e3df96cfda
commit
fc257fae3c
@ -161,11 +161,12 @@ impl fmt::Display for PanicInfo<'_> {
|
||||
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
formatter.write_str("panicked at ")?;
|
||||
self.location.fmt(formatter)?;
|
||||
formatter.write_str(":")?;
|
||||
if let Some(message) = self.message {
|
||||
formatter.write_str(":\n")?;
|
||||
formatter.write_str("\n")?;
|
||||
formatter.write_fmt(*message)?;
|
||||
} else if let Some(payload) = self.payload.downcast_ref::<&'static str>() {
|
||||
formatter.write_str(":\n")?;
|
||||
formatter.write_str("\n")?;
|
||||
formatter.write_str(payload)?;
|
||||
}
|
||||
// NOTE: we cannot use downcast_ref::<String>() here
|
||||
|
@ -746,7 +746,13 @@ fn rust_panic_with_hook(
|
||||
panic_count::MustAbort::PanicInHook => {
|
||||
// Don't try to print the message in this case
|
||||
// - perhaps that is causing the recursive panics.
|
||||
rtprintpanic!("thread panicked while processing panic. aborting.\n");
|
||||
let panicinfo = PanicInfo::internal_constructor(
|
||||
None, // no message
|
||||
location, // but we want to show the location!
|
||||
can_unwind,
|
||||
force_no_backtrace,
|
||||
);
|
||||
rtprintpanic!("{panicinfo}\nthread panicked while processing panic. aborting.\n");
|
||||
}
|
||||
panic_count::MustAbort::AlwaysAbort => {
|
||||
// Unfortunately, this does not print a backtrace, because creating
|
||||
|
25
tests/ui/panics/panic-in-message-fmt.rs
Normal file
25
tests/ui/panics/panic-in-message-fmt.rs
Normal file
@ -0,0 +1,25 @@
|
||||
// Checks what happens when formatting the panic message panics.
|
||||
|
||||
//@ run-fail
|
||||
//@ exec-env:RUST_BACKTRACE=0
|
||||
//@ check-run-results
|
||||
//@ error-pattern: panicked while processing panic
|
||||
//@ normalize-stderr-test: "\n +[0-9]+:[^\n]+" -> ""
|
||||
//@ normalize-stderr-test: "\n +at [^\n]+" -> ""
|
||||
//@ normalize-stderr-test: "(core/src/panicking\.rs):[0-9]+:[0-9]+" -> "$1:$$LINE:$$COL"
|
||||
//@ ignore-emscripten "RuntimeError" junk in output
|
||||
|
||||
use std::fmt::{Display, self};
|
||||
|
||||
struct MyStruct;
|
||||
|
||||
impl Display for MyStruct {
|
||||
fn fmt(&self, _: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let instance = MyStruct;
|
||||
panic!("this is wrong: {}", instance);
|
||||
}
|
2
tests/ui/panics/panic-in-message-fmt.run.stderr
Normal file
2
tests/ui/panics/panic-in-message-fmt.run.stderr
Normal file
@ -0,0 +1,2 @@
|
||||
panicked at $DIR/panic-in-message-fmt.rs:18:9:
|
||||
thread panicked while processing panic. aborting.
|
Loading…
Reference in New Issue
Block a user