diff options
| author | bors <bors@rust-lang.org> | 2022-09-17 19:33:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-09-17 19:33:52 +0000 |
| commit | 98ad6a5519651af36e246c0335c964dd52c554ba (patch) | |
| tree | 446f21ef7c05f7decf35b4f17f286d1b975ae53e /compiler/rustc_query_impl/src | |
| parent | c773c134c949661874d76313280e76cc3dd60975 (diff) | |
| parent | 1f31bee266fa7275e116d50758e4eb85f78beb9d (diff) | |
| download | rust-98ad6a5519651af36e246c0335c964dd52c554ba.tar.gz rust-98ad6a5519651af36e246c0335c964dd52c554ba.zip | |
Auto merge of #101946 - matthiaskrgr:rollup-jqkhsku, r=matthiaskrgr
Rollup of 9 pull requests Successful merges: - #101672 (array docs - advertise how to get array from slice) - #101781 (Extend list of targets that support dyanmic linking for llvm tools) - #101783 (Improve handing of env vars during bootstrap process) - #101801 (add note for `layout_of` when query depth overflows) - #101824 (rustdoc: add test cases for turning ``[Vec<T>]`` into ``[`Vec<T>`]``) - #101861 (Update stdarch) - #101873 (Allow building `rust-analyzer-proc-macro-srv` as a standalone tool) - #101918 (rustdoc: clean up CSS for All Items and All Crates lists) - #101934 (Continue migration of CSS themes) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_query_impl/src')
| -rw-r--r-- | compiler/rustc_query_impl/src/plumbing.rs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/compiler/rustc_query_impl/src/plumbing.rs b/compiler/rustc_query_impl/src/plumbing.rs index 6f39bbfc0dc..d819f4774d5 100644 --- a/compiler/rustc_query_impl/src/plumbing.rs +++ b/compiler/rustc_query_impl/src/plumbing.rs @@ -19,8 +19,10 @@ use rustc_query_system::query::{ force_query, QueryConfig, QueryContext, QueryDescription, QueryJobId, QueryMap, QuerySideEffects, QueryStackFrame, }; -use rustc_query_system::Value; +use rustc_query_system::{LayoutOfDepth, QueryOverflow, Value}; use rustc_serialize::Decodable; +use rustc_session::Limit; +use rustc_span::def_id::LOCAL_CRATE; use std::any::Any; use std::num::NonZeroU64; use thin_vec::ThinVec; @@ -109,7 +111,7 @@ impl QueryContext for QueryCtxt<'_> { // when accessing the `ImplicitCtxt`. tls::with_related_context(**self, move |current_icx| { if depth_limit && !self.recursion_limit().value_within_limit(current_icx.query_depth) { - self.depth_limit_error(); + self.depth_limit_error(token); } // Update the `ImplicitCtxt` to point to our new query job. @@ -127,6 +129,29 @@ impl QueryContext for QueryCtxt<'_> { }) }) } + + fn depth_limit_error(&self, job: QueryJobId) { + let mut span = None; + let mut layout_of_depth = None; + if let Some(map) = self.try_collect_active_jobs() { + if let Some((info, depth)) = job.try_find_layout_root(map) { + span = Some(info.job.span); + layout_of_depth = Some(LayoutOfDepth { desc: info.query.description, depth }); + } + } + + let suggested_limit = match self.recursion_limit() { + Limit(0) => Limit(2), + limit => limit * 2, + }; + + self.sess.emit_fatal(QueryOverflow { + span, + layout_of_depth, + suggested_limit, + crate_name: self.crate_name(LOCAL_CRATE), + }); + } } impl<'tcx> QueryCtxt<'tcx> { |
