Skip to content

Commit

Permalink
Make PanicInfo::message available for std::panic! with a formatting s…
Browse files Browse the repository at this point in the history
…tring.

This enables PanicInfo’s Display impl to show the panic message in those cases.
  • Loading branch information
SimonSapin committed Jan 23, 2018
1 parent 0e60287 commit f15c816
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 8 deletions.
4 changes: 2 additions & 2 deletions src/libcore/panic.rs
Expand Up @@ -130,8 +130,8 @@ impl<'a> fmt::Display for PanicInfo<'a> {
}
// NOTE: we cannot use downcast_ref::<String>() here
// since String is not available in libcore!
// A String payload and no message is what we’d get from `std::panic!`
// called with multiple arguments.
// The payload is a String when `std::panic!` is called with multiple arguments,
// but in that case the message is also available.

self.location.fmt(formatter)
}
Expand Down
13 changes: 7 additions & 6 deletions src/libstd/panicking.rs
Expand Up @@ -344,7 +344,7 @@ pub fn begin_panic_fmt(msg: &fmt::Arguments,

let mut s = String::new();
let _ = s.write_fmt(*msg);
begin_panic(s, file_line_col)
rust_panic_with_hook(Box::new(s), Some(msg), file_line_col)
}

/// This is the entry point of panicking for panic!() and assert!().
Expand All @@ -360,7 +360,7 @@ pub fn begin_panic<M: Any + Send>(msg: M, file_line_col: &(&'static str, u32, u3
// be performed in the parent of this thread instead of the thread that's
// panicking.

rust_panic_with_hook(Box::new(msg), file_line_col)
rust_panic_with_hook(Box::new(msg), None, file_line_col)
}

/// Executes the primary logic for a panic, including checking for recursive
Expand All @@ -371,7 +371,8 @@ pub fn begin_panic<M: Any + Send>(msg: M, file_line_col: &(&'static str, u32, u3
/// run panic hooks, and then delegate to the actual implementation of panics.
#[inline(never)]
#[cold]
fn rust_panic_with_hook(msg: Box<Any + Send>,
fn rust_panic_with_hook(payload: Box<Any + Send>,
message: Option<&fmt::Arguments>,
file_line_col: &(&'static str, u32, u32)) -> ! {
let (file, line, col) = *file_line_col;

Expand All @@ -390,8 +391,8 @@ fn rust_panic_with_hook(msg: Box<Any + Send>,

unsafe {
let info = PanicInfo::internal_constructor(
&*msg,
None,
&*payload,
message,
Location::internal_constructor(file, line, col),
);
HOOK_LOCK.read();
Expand All @@ -412,7 +413,7 @@ fn rust_panic_with_hook(msg: Box<Any + Send>,
unsafe { intrinsics::abort() }
}

rust_panic(msg)
rust_panic(payload)
}

/// Shim around rust_panic. Called by resume_unwind.
Expand Down

0 comments on commit f15c816

Please sign in to comment.