Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit a87de89

Browse files
committed
Move print_query_stack to rustc_query_system.
1 parent c26d965 commit a87de89

File tree

4 files changed

+46
-38
lines changed

4 files changed

+46
-38
lines changed

compiler/rustc_query_impl/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ extern crate tracing;
1818

1919
use rustc_data_structures::fingerprint::Fingerprint;
2020
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
21-
use rustc_errors::{Diagnostic, DiagnosticBuilder, Handler, Level};
21+
use rustc_errors::{DiagnosticBuilder, Handler};
2222
use rustc_hir::def_id::CrateNum;
2323
use rustc_index::vec::IndexVec;
2424
use rustc_middle::dep_graph;

compiler/rustc_query_impl/src/plumbing.rs

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -584,38 +584,8 @@ macro_rules! define_queries_struct {
584584
handler: &Handler,
585585
num_frames: Option<usize>,
586586
) -> usize {
587-
let query_map = self.try_collect_active_jobs(tcx);
588-
589-
let mut current_query = query;
590-
let mut i = 0;
591-
592-
while let Some(query) = current_query {
593-
if Some(i) == num_frames {
594-
break;
595-
}
596-
let query_info = if let Some(info) = query_map.as_ref().and_then(|map| map.get(&query))
597-
{
598-
info
599-
} else {
600-
break;
601-
};
602-
let mut diag = Diagnostic::new(
603-
Level::FailureNote,
604-
&format!(
605-
"#{} [{}] {}",
606-
i,
607-
query_info.info.query.name,
608-
query_info.info.query.description,
609-
),
610-
);
611-
diag.span = tcx.sess.source_map().guess_head_span(query_info.info.span).into();
612-
handler.force_print_diagnostic(diag);
613-
614-
current_query = query_info.job.parent;
615-
i += 1;
616-
}
617-
618-
i
587+
let qcx = QueryCtxt { tcx, queries: self };
588+
rustc_query_system::query::print_query_stack(qcx, query, handler, num_frames)
619589
}
620590

621591
$($(#[$attr])*

compiler/rustc_query_system/src/query/job.rs

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
use crate::dep_graph::DepContext;
12
use crate::query::plumbing::CycleError;
2-
use crate::query::QueryStackFrame;
3+
use crate::query::{QueryContext, QueryStackFrame};
34

45
use rustc_data_structures::fx::FxHashMap;
5-
use rustc_errors::{struct_span_err, DiagnosticBuilder};
6+
use rustc_errors::{struct_span_err, Diagnostic, DiagnosticBuilder, Handler, Level};
67
use rustc_session::Session;
78
use rustc_span::Span;
89

@@ -13,8 +14,6 @@ use std::num::NonZeroU32;
1314

1415
#[cfg(parallel_compiler)]
1516
use {
16-
crate::dep_graph::DepContext,
17-
crate::query::QueryContext,
1817
parking_lot::{Condvar, Mutex},
1918
rustc_data_structures::fx::FxHashSet,
2019
rustc_data_structures::stable_hasher::{HashStable, StableHasher},
@@ -626,3 +625,42 @@ pub(crate) fn report_cycle<'a>(
626625

627626
err
628627
}
628+
629+
pub fn print_query_stack<CTX: QueryContext>(
630+
tcx: CTX,
631+
mut current_query: Option<QueryJobId<CTX::DepKind>>,
632+
handler: &Handler,
633+
num_frames: Option<usize>,
634+
) -> usize {
635+
// Be careful relying on global state here: this code is called from
636+
// a panic hook, which means that the global `Handler` may be in a weird
637+
// state if it was responsible for triggering the panic.
638+
let mut i = 0;
639+
let query_map = tcx.try_collect_active_jobs();
640+
641+
while let Some(query) = current_query {
642+
if Some(i) == num_frames {
643+
break;
644+
}
645+
let query_info = if let Some(info) = query_map.as_ref().and_then(|map| map.get(&query)) {
646+
info
647+
} else {
648+
break;
649+
};
650+
let mut diag = Diagnostic::new(
651+
Level::FailureNote,
652+
&format!(
653+
"#{} [{}] {}",
654+
i, query_info.info.query.name, query_info.info.query.description
655+
),
656+
);
657+
diag.span =
658+
tcx.dep_context().sess().source_map().guess_head_span(query_info.info.span).into();
659+
handler.force_print_diagnostic(diag);
660+
661+
current_query = query_info.job.parent;
662+
i += 1;
663+
}
664+
665+
i
666+
}

compiler/rustc_query_system/src/query/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub use self::plumbing::*;
44
mod job;
55
#[cfg(parallel_compiler)]
66
pub use self::job::deadlock;
7-
pub use self::job::{QueryInfo, QueryJob, QueryJobId, QueryJobInfo, QueryMap};
7+
pub use self::job::{print_query_stack, QueryInfo, QueryJob, QueryJobId, QueryJobInfo, QueryMap};
88

99
mod caches;
1010
pub use self::caches::{

0 commit comments

Comments
 (0)