mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Avoid using unnecessary queries when printing the query stack in panics
This commit is contained in:
parent
7606c13961
commit
fb9161028b
@ -17,6 +17,7 @@ use rustc_middle::dep_graph::{
|
|||||||
use rustc_middle::query::on_disk_cache::AbsoluteBytePos;
|
use rustc_middle::query::on_disk_cache::AbsoluteBytePos;
|
||||||
use rustc_middle::query::on_disk_cache::{CacheDecoder, CacheEncoder, EncodedDepNodeIndex};
|
use rustc_middle::query::on_disk_cache::{CacheDecoder, CacheEncoder, EncodedDepNodeIndex};
|
||||||
use rustc_middle::query::Key;
|
use rustc_middle::query::Key;
|
||||||
|
use rustc_middle::ty::print::with_reduced_queries;
|
||||||
use rustc_middle::ty::tls::{self, ImplicitCtxt};
|
use rustc_middle::ty::tls::{self, ImplicitCtxt};
|
||||||
use rustc_middle::ty::{self, TyCtxt};
|
use rustc_middle::ty::{self, TyCtxt};
|
||||||
use rustc_query_system::dep_graph::{DepNodeParams, HasDepContext};
|
use rustc_query_system::dep_graph::{DepNodeParams, HasDepContext};
|
||||||
@ -304,6 +305,10 @@ pub(crate) fn create_query_frame<
|
|||||||
kind: DepKind,
|
kind: DepKind,
|
||||||
name: &'static str,
|
name: &'static str,
|
||||||
) -> QueryStackFrame {
|
) -> QueryStackFrame {
|
||||||
|
// If reduced queries are requested, we may be printing a query stack due
|
||||||
|
// to a panic. Avoid using `default_span` and `def_kind` in that case.
|
||||||
|
let reduce_queries = with_reduced_queries();
|
||||||
|
|
||||||
// Avoid calling queries while formatting the description
|
// Avoid calling queries while formatting the description
|
||||||
let description = ty::print::with_no_queries!(do_describe(tcx, key));
|
let description = ty::print::with_no_queries!(do_describe(tcx, key));
|
||||||
let description = if tcx.sess.verbose_internals() {
|
let description = if tcx.sess.verbose_internals() {
|
||||||
@ -311,7 +316,7 @@ pub(crate) fn create_query_frame<
|
|||||||
} else {
|
} else {
|
||||||
description
|
description
|
||||||
};
|
};
|
||||||
let span = if kind == dep_graph::dep_kinds::def_span {
|
let span = if kind == dep_graph::dep_kinds::def_span || reduce_queries {
|
||||||
// The `def_span` query is used to calculate `default_span`,
|
// The `def_span` query is used to calculate `default_span`,
|
||||||
// so exit to avoid infinite recursion.
|
// so exit to avoid infinite recursion.
|
||||||
None
|
None
|
||||||
@ -319,7 +324,7 @@ pub(crate) fn create_query_frame<
|
|||||||
Some(key.default_span(tcx))
|
Some(key.default_span(tcx))
|
||||||
};
|
};
|
||||||
let def_id = key.key_as_def_id();
|
let def_id = key.key_as_def_id();
|
||||||
let def_kind = if kind == dep_graph::dep_kinds::def_kind {
|
let def_kind = if kind == dep_graph::dep_kinds::def_kind || reduce_queries {
|
||||||
// Try to avoid infinite recursion.
|
// Try to avoid infinite recursion.
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user