Rollup merge of #77493 - hosseind88:ICEs_should_always_print_the_top_of_the_query_stack, r=oli-obk
ICEs should always print the top of the query stack see #76920
This commit is contained in:
commit
0e4d19603b
|
@ -1258,9 +1258,9 @@ pub fn report_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
|
||||||
// If backtraces are enabled, also print the query stack
|
// If backtraces are enabled, also print the query stack
|
||||||
let backtrace = env::var_os("RUST_BACKTRACE").map(|x| &x != "0").unwrap_or(false);
|
let backtrace = env::var_os("RUST_BACKTRACE").map(|x| &x != "0").unwrap_or(false);
|
||||||
|
|
||||||
if backtrace {
|
let num_frames = if backtrace { None } else { Some(2) };
|
||||||
TyCtxt::try_print_query_stack(&handler);
|
|
||||||
}
|
TyCtxt::try_print_query_stack(&handler, num_frames);
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
|
@ -124,20 +124,23 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn try_print_query_stack(handler: &Handler) {
|
pub fn try_print_query_stack(handler: &Handler, num_frames: Option<usize>) {
|
||||||
eprintln!("query stack during panic:");
|
eprintln!("query stack during panic:");
|
||||||
|
|
||||||
// Be careful reyling on global state here: this code is called from
|
// Be careful reyling on global state here: this code is called from
|
||||||
// a panic hook, which means that the global `Handler` may be in a weird
|
// a panic hook, which means that the global `Handler` may be in a weird
|
||||||
// state if it was responsible for triggering the panic.
|
// state if it was responsible for triggering the panic.
|
||||||
|
let mut i = 0;
|
||||||
ty::tls::with_context_opt(|icx| {
|
ty::tls::with_context_opt(|icx| {
|
||||||
if let Some(icx) = icx {
|
if let Some(icx) = icx {
|
||||||
let query_map = icx.tcx.queries.try_collect_active_jobs();
|
let query_map = icx.tcx.queries.try_collect_active_jobs();
|
||||||
|
|
||||||
let mut current_query = icx.query;
|
let mut current_query = icx.query;
|
||||||
let mut i = 0;
|
|
||||||
|
|
||||||
while let Some(query) = current_query {
|
while let Some(query) = current_query {
|
||||||
|
if Some(i) == num_frames {
|
||||||
|
break;
|
||||||
|
}
|
||||||
let query_info =
|
let query_info =
|
||||||
if let Some(info) = query_map.as_ref().and_then(|map| map.get(&query)) {
|
if let Some(info) = query_map.as_ref().and_then(|map| map.get(&query)) {
|
||||||
info
|
info
|
||||||
|
@ -163,7 +166,11 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
eprintln!("end of query stack");
|
if num_frames == None || num_frames >= Some(i) {
|
||||||
|
eprintln!("end of query stack");
|
||||||
|
} else {
|
||||||
|
eprintln!("we're just showing a limited slice of the query stack");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
||||||
|
// normalize-stderr-test "query stack during panic:\n" -> ""
|
||||||
|
// normalize-stderr-test "we're just showing a limited slice of the query stack\n" -> ""
|
||||||
|
// normalize-stderr-test "end of query stack\n" -> ""
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate invalid_punct_ident;
|
extern crate invalid_punct_ident;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: proc macro panicked
|
error: proc macro panicked
|
||||||
--> $DIR/invalid-punct-ident-1.rs:16:1
|
--> $DIR/invalid-punct-ident-1.rs:19:1
|
||||||
|
|
|
|
||||||
LL | invalid_punct!();
|
LL | invalid_punct!();
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
||||||
|
// normalize-stderr-test "query stack during panic:\n" -> ""
|
||||||
|
// normalize-stderr-test "we're just showing a limited slice of the query stack\n" -> ""
|
||||||
|
// normalize-stderr-test "end of query stack\n" -> ""
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate invalid_punct_ident;
|
extern crate invalid_punct_ident;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: proc macro panicked
|
error: proc macro panicked
|
||||||
--> $DIR/invalid-punct-ident-2.rs:16:1
|
--> $DIR/invalid-punct-ident-2.rs:19:1
|
||||||
|
|
|
|
||||||
LL | invalid_ident!();
|
LL | invalid_ident!();
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
||||||
|
// normalize-stderr-test "query stack during panic:\n" -> ""
|
||||||
|
// normalize-stderr-test "we're just showing a limited slice of the query stack\n" -> ""
|
||||||
|
// normalize-stderr-test "end of query stack\n" -> ""
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate invalid_punct_ident;
|
extern crate invalid_punct_ident;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: proc macro panicked
|
error: proc macro panicked
|
||||||
--> $DIR/invalid-punct-ident-3.rs:16:1
|
--> $DIR/invalid-punct-ident-3.rs:19:1
|
||||||
|
|
|
|
||||||
LL | invalid_raw_ident!();
|
LL | invalid_raw_ident!();
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
// normalize-stderr-test "note: we would appreciate a bug report.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
// normalize-stderr-test "note: compiler flags.*\n\n" -> ""
|
||||||
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
// normalize-stderr-test "note: rustc.*running on.*\n\n" -> ""
|
||||||
|
// normalize-stderr-test "query stack during panic:\n" -> ""
|
||||||
|
// normalize-stderr-test "we're just showing a limited slice of the query stack\n" -> ""
|
||||||
|
// normalize-stderr-test "end of query stack\n" -> ""
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate test_macros;
|
extern crate test_macros;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
at 'panic-derive', $DIR/auxiliary/test-macros.rs:43:5
|
at 'panic-derive', $DIR/auxiliary/test-macros.rs:43:5
|
||||||
error: proc-macro derive panicked
|
error: proc-macro derive panicked
|
||||||
--> $DIR/load-panic-backtrace.rs:17:10
|
--> $DIR/load-panic-backtrace.rs:20:10
|
||||||
|
|
|
|
||||||
LL | #[derive(Panic)]
|
LL | #[derive(Panic)]
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
@ -277,9 +277,9 @@ fn report_clippy_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
|
||||||
// If backtraces are enabled, also print the query stack
|
// If backtraces are enabled, also print the query stack
|
||||||
let backtrace = env::var_os("RUST_BACKTRACE").map_or(false, |x| &x != "0");
|
let backtrace = env::var_os("RUST_BACKTRACE").map_or(false, |x| &x != "0");
|
||||||
|
|
||||||
if backtrace {
|
let num_frames = if backtrace { None } else { Some(2) };
|
||||||
TyCtxt::try_print_query_stack(&handler);
|
|
||||||
}
|
TyCtxt::try_print_query_stack(&handler, num_frames);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<PathBuf> {
|
fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<PathBuf> {
|
||||||
|
|
|
@ -9,3 +9,5 @@ note: we would appreciate a bug report: https://github.com/rust-lang/rust-clippy
|
||||||
|
|
||||||
note: Clippy version: foo
|
note: Clippy version: foo
|
||||||
|
|
||||||
|
query stack during panic:
|
||||||
|
end of query stack
|
||||||
|
|
Loading…
Reference in New Issue