Rollup merge of #92992 - kornelski:backtraceopt, r=Mark-Simulacrum
Help optimize out backtraces when disabled The comment in `rust_backtrace_env` says: > // If the `backtrace` feature of this crate isn't enabled quickly return > // `None` so this can be constant propagated all over the place to turn > // optimize away callers. but this optimization has regressed, because the only caller of this function had an alternative path that unconditionally (and pointlessly) asked for a full backtrace, so the disabled state couldn't propagate. I've added a getter for the full format that respects the feature flag, so that the caller will now be able to really optimize out the disabled backtrace path. I've also made `rust_backtrace_env` trivially inlineable when backtraces are disabled.
This commit is contained in:
commit
1cb57e2d2b
2 changed files with 19 additions and 8 deletions
|
@ -263,7 +263,7 @@ fn default_hook(info: &PanicInfo<'_>) {
|
||||||
// If this is a double panic, make sure that we print a backtrace
|
// If this is a double panic, make sure that we print a backtrace
|
||||||
// for this panic. Otherwise only print it if logging is enabled.
|
// for this panic. Otherwise only print it if logging is enabled.
|
||||||
let backtrace_env = if panic_count::get_count() >= 2 {
|
let backtrace_env = if panic_count::get_count() >= 2 {
|
||||||
RustBacktrace::Print(crate::backtrace_rs::PrintFmt::Full)
|
backtrace::rust_backtrace_print_full()
|
||||||
} else {
|
} else {
|
||||||
backtrace::rust_backtrace_env()
|
backtrace::rust_backtrace_env()
|
||||||
};
|
};
|
||||||
|
|
|
@ -150,16 +150,18 @@ pub enum RustBacktrace {
|
||||||
RuntimeDisabled,
|
RuntimeDisabled,
|
||||||
}
|
}
|
||||||
|
|
||||||
// For now logging is turned off by default, and this function checks to see
|
|
||||||
// whether the magical environment variable is present to see if it's turned on.
|
|
||||||
pub fn rust_backtrace_env() -> RustBacktrace {
|
|
||||||
// If the `backtrace` feature of this crate isn't enabled quickly return
|
// If the `backtrace` feature of this crate isn't enabled quickly return
|
||||||
// `None` so this can be constant propagated all over the place to turn
|
// `Disabled` so this can be constant propagated all over the place to
|
||||||
// optimize away callers.
|
// optimize away callers.
|
||||||
if !cfg!(feature = "backtrace") {
|
#[cfg(not(feature = "backtrace"))]
|
||||||
return RustBacktrace::Disabled;
|
pub fn rust_backtrace_env() -> RustBacktrace {
|
||||||
|
RustBacktrace::Disabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For now logging is turned off by default, and this function checks to see
|
||||||
|
// whether the magical environment variable is present to see if it's turned on.
|
||||||
|
#[cfg(feature = "backtrace")]
|
||||||
|
pub fn rust_backtrace_env() -> RustBacktrace {
|
||||||
// Setting environment variables for Fuchsia components isn't a standard
|
// Setting environment variables for Fuchsia components isn't a standard
|
||||||
// or easily supported workflow. For now, always display backtraces.
|
// or easily supported workflow. For now, always display backtraces.
|
||||||
if cfg!(target_os = "fuchsia") {
|
if cfg!(target_os = "fuchsia") {
|
||||||
|
@ -189,6 +191,15 @@ pub fn rust_backtrace_env() -> RustBacktrace {
|
||||||
format
|
format
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Setting for printing the full backtrace, unless backtraces are completely disabled
|
||||||
|
pub(crate) fn rust_backtrace_print_full() -> RustBacktrace {
|
||||||
|
if cfg!(feature = "backtrace") {
|
||||||
|
RustBacktrace::Print(PrintFmt::Full)
|
||||||
|
} else {
|
||||||
|
RustBacktrace::Disabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Prints the filename of the backtrace frame.
|
/// Prints the filename of the backtrace frame.
|
||||||
///
|
///
|
||||||
/// See also `output`.
|
/// See also `output`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue