Skip to content

Commit

Permalink
Auto merge of #129491 - StackOverflowExcept1on:master, r=m-ou-se
Browse files Browse the repository at this point in the history
Pass `fmt::Arguments` by reference to `PanicInfo` and `PanicMessage`

Resolves #129330

For some reason after #115974 and #126732 optimizations applied to panic handler became worse and compiler stopped removing panic locations if they are not used in the panic message. This PR fixes that and maybe we can merge it into beta before rust 1.81 is released.

Note: optimization only works with `lto = "fat"`.

r? libs-api
  • Loading branch information
bors committed Sep 18, 2024
2 parents 82d17a4 + c2fdb34 commit aaed38b
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
12 changes: 6 additions & 6 deletions library/core/src/panic/panic_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::panic::Location;
#[stable(feature = "panic_hooks", since = "1.10.0")]
#[derive(Debug)]
pub struct PanicInfo<'a> {
message: fmt::Arguments<'a>,
message: &'a fmt::Arguments<'a>,
location: &'a Location<'a>,
can_unwind: bool,
force_no_backtrace: bool,
Expand All @@ -26,13 +26,13 @@ pub struct PanicInfo<'a> {
/// See [`PanicInfo::message`].
#[stable(feature = "panic_info_message", since = "1.81.0")]
pub struct PanicMessage<'a> {
message: fmt::Arguments<'a>,
message: &'a fmt::Arguments<'a>,
}

impl<'a> PanicInfo<'a> {
#[inline]
pub(crate) fn new(
message: fmt::Arguments<'a>,
message: &'a fmt::Arguments<'a>,
location: &'a Location<'a>,
can_unwind: bool,
force_no_backtrace: bool,
Expand Down Expand Up @@ -146,7 +146,7 @@ impl Display for PanicInfo<'_> {
formatter.write_str("panicked at ")?;
self.location.fmt(formatter)?;
formatter.write_str(":\n")?;
formatter.write_fmt(self.message)?;
formatter.write_fmt(*self.message)?;
Ok(())
}
}
Expand Down Expand Up @@ -177,14 +177,14 @@ impl<'a> PanicMessage<'a> {
impl Display for PanicMessage<'_> {
#[inline]
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_fmt(self.message)
formatter.write_fmt(*self.message)
}
}

#[stable(feature = "panic_info_message", since = "1.81.0")]
impl fmt::Debug for PanicMessage<'_> {
#[inline]
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_fmt(self.message)
formatter.write_fmt(*self.message)
}
}
4 changes: 2 additions & 2 deletions library/core/src/panicking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub const fn panic_fmt(fmt: fmt::Arguments<'_>) -> ! {
}

let pi = PanicInfo::new(
fmt,
&fmt,
Location::caller(),
/* can_unwind */ true,
/* force_no_backtrace */ false,
Expand Down Expand Up @@ -102,7 +102,7 @@ pub const fn panic_nounwind_fmt(fmt: fmt::Arguments<'_>, force_no_backtrace: boo

// PanicInfo with the `can_unwind` flag set to false forces an abort.
let pi = PanicInfo::new(
fmt,
&fmt,
Location::caller(),
/* can_unwind */ false,
force_no_backtrace,
Expand Down

0 comments on commit aaed38b

Please sign in to comment.