Rollup merge of #93566 - Aaron1011:rustc-backtrace, r=davidtwco
Make rustc use `RUST_BACKTRACE=full` by default Compiler panics should be rare - when they do occur, we want the report filed by the user to contain as much information as possible. This is especially important when the panic is due to an incremental compilation bug, since we may not have enough information to reproduce it. This PR sets `RUST_BACKTRACE=full` inside `rustc` if the user has not explicitly set `RUST_BACKTRACE`. This is more verbose than `RUST_BACKTRACE=1`, but this may make it easier to debug incremental compilation issues. Users who find this too verbose can still manually set `RUST_BACKTRACE` before invoking the compiler. This only affects `rustc` (and any tool using `rustc_driver::install_ice_hook`). It does *not* affect any user crates or the standard library - backtraces will continue to be off by default in any application *compiled* by rustc.
This commit is contained in:
commit
333d3d6243
3 changed files with 36 additions and 0 deletions
|
@ -1240,6 +1240,15 @@ pub fn report_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
|
|||
///
|
||||
/// A custom rustc driver can skip calling this to set up a custom ICE hook.
|
||||
pub fn install_ice_hook() {
|
||||
// If the user has not explicitly overriden "RUST_BACKTRACE", then produce
|
||||
// full backtraces. When a compiler ICE happens, we want to gather
|
||||
// as much information as possible to present in the issue opened
|
||||
// by the user. Compiler developers and other rustc users can
|
||||
// opt in to less-verbose backtraces by manually setting "RUST_BACKTRACE"
|
||||
// (e.g. `RUST_BACKTRACE=1`)
|
||||
if std::env::var("RUST_BACKTRACE").is_err() {
|
||||
std::env::set_var("RUST_BACKTRACE", "full");
|
||||
}
|
||||
SyncLazy::force(&DEFAULT_HOOK);
|
||||
}
|
||||
|
||||
|
|
9
src/test/ui/panics/default-backtrace-ice.rs
Normal file
9
src/test/ui/panics/default-backtrace-ice.rs
Normal file
|
@ -0,0 +1,9 @@
|
|||
// unset-rustc-env:RUST_BACKTRACE
|
||||
// compile-flags:-Z treat-err-as-bug=1
|
||||
// error-pattern:stack backtrace:
|
||||
// failure-status:101
|
||||
// normalize-stderr-test "note: .*" -> ""
|
||||
// normalize-stderr-test "thread 'rustc' .*" -> ""
|
||||
// normalize-stderr-test " .*\n" -> ""
|
||||
|
||||
fn main() { missing_ident; }
|
18
src/test/ui/panics/default-backtrace-ice.stderr
Normal file
18
src/test/ui/panics/default-backtrace-ice.stderr
Normal file
|
@ -0,0 +1,18 @@
|
|||
error[E0425]: cannot find value `missing_ident` in this scope
|
||||
LL | fn main() { missing_ident; }
|
||||
|
||||
|
||||
stack backtrace:
|
||||
|
||||
error: internal compiler error: unexpected panic
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
query stack during panic:
|
||||
end of query stack
|
Loading…
Add table
Add a link
Reference in a new issue