mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 05:51:58 +00:00
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:
commit
aaed38b2a6
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user