Skip to content

Commit

Permalink
Make rustc use RUST_BACKTRACE=full by default
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Aaron1011 committed Feb 2, 2022
1 parent 1ea4851 commit 891368f
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
9 changes: 9 additions & 0 deletions compiler/rustc_driver/src/lib.rs
Expand Up @@ -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);
}

Expand Down
9 changes: 9 additions & 0 deletions src/test/ui/panics/default-backtrace-ice.rs
@@ -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 changes: 18 additions & 0 deletions src/test/ui/panics/default-backtrace-ice.stderr
@@ -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

0 comments on commit 891368f

Please sign in to comment.