ICEs should print the top of the query stack

This commit is contained in:
hosseind75 2020-09-19 17:51:24 +04:30 committed by hosseind88
parent be719d11e5
commit 17eb8d8b34
3 changed files with 6 additions and 13 deletions

View file

@ -1211,12 +1211,7 @@ pub fn report_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
handler.note_without_error(&note); handler.note_without_error(&note);
} }
// If backtraces are enabled, also print the query stack TyCtxt::try_print_query_stack(&handler, Some(2));
let backtrace = env::var_os("RUST_BACKTRACE").map(|x| &x != "0").unwrap_or(false);
if backtrace {
TyCtxt::try_print_query_stack(&handler);
}
#[cfg(windows)] #[cfg(windows)]
unsafe { unsafe {

View file

@ -124,7 +124,7 @@ 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
@ -138,6 +138,9 @@ impl<'tcx> TyCtxt<'tcx> {
let mut i = 0; let mut i = 0;
while let Some(query) = current_query { while let Some(query) = current_query {
if i == num_frames.unwrap() {
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

View file

@ -274,12 +274,7 @@ fn report_clippy_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
handler.note_without_error(&note); handler.note_without_error(&note);
} }
// If backtraces are enabled, also print the query stack TyCtxt::try_print_query_stack(&handler, Some(2));
let backtrace = env::var_os("RUST_BACKTRACE").map_or(false, |x| &x != "0");
if backtrace {
TyCtxt::try_print_query_stack(&handler);
}
} }
fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<PathBuf> { fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<PathBuf> {