Auto merge of #129491 - StackOverflowExcept1on:master, r=m-ou-se

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
This commit is contained in:
bors 2024-09-18 11:57:31 +00:00
commit aaed38b2a6
2 changed files with 8 additions and 8 deletions

View File

@ -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,
@ -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,
@ -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(())
}
}
@ -177,7 +177,7 @@ 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)
}
}
@ -185,6 +185,6 @@ impl Display for PanicMessage<'_> {
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)
}
}

View File

@ -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,
@ -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,