diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2025-03-21 08:09:42 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2025-03-21 08:14:27 +0100 |
| commit | 34244c1477e4b485c51872fc3c6d846b4a3c6ffa (patch) | |
| tree | 4284de5056f3ddd27943c18b8e189cc4bf6650f8 /compiler/rustc_query_impl | |
| parent | 157008d7117ec9ca13b70c38058639524437112f (diff) | |
| download | rust-34244c1477e4b485c51872fc3c6d846b4a3c6ffa.tar.gz rust-34244c1477e4b485c51872fc3c6d846b4a3c6ffa.zip | |
Address comments
Diffstat (limited to 'compiler/rustc_query_impl')
| -rw-r--r-- | compiler/rustc_query_impl/src/plumbing.rs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/compiler/rustc_query_impl/src/plumbing.rs b/compiler/rustc_query_impl/src/plumbing.rs index 301bcac4ca7..cafe16ce77b 100644 --- a/compiler/rustc_query_impl/src/plumbing.rs +++ b/compiler/rustc_query_impl/src/plumbing.rs @@ -79,17 +79,20 @@ impl QueryContext for QueryCtxt<'_> { tls::with_related_context(self.tcx, |icx| icx.query) } - /// Returns a query map representing active query jobs and a bool being false - /// if there was an error constructing the map. - fn collect_active_jobs(self) -> (QueryMap, bool) { + /// Returns a query map representing active query jobs. + /// It returns an incomplete map as an error if it fails + /// to take locks. + fn collect_active_jobs(self) -> Result<QueryMap, QueryMap> { let mut jobs = QueryMap::default(); let mut complete = true; for collect in super::TRY_COLLECT_ACTIVE_JOBS.iter() { - collect(self.tcx, &mut jobs, &mut complete); + if collect(self.tcx, &mut jobs).is_none() { + complete = false; + } } - (jobs, complete) + if complete { Ok(jobs) } else { Err(jobs) } } // Interactions with on_disk_cache @@ -143,7 +146,11 @@ impl QueryContext for QueryCtxt<'_> { fn depth_limit_error(self, job: QueryJobId) { // FIXME: `collect_active_jobs` expects no locks to be held, which doesn't hold for this call. - let (info, depth) = job.find_dep_kind_root(self.collect_active_jobs().0); + let query_map = match self.collect_active_jobs() { + Ok(query_map) => query_map, + Err(query_map) => query_map, + }; + let (info, depth) = job.find_dep_kind_root(query_map); let suggested_limit = match self.recursion_limit() { Limit(0) => Limit(2), @@ -681,7 +688,7 @@ macro_rules! define_queries { } } - pub(crate) fn try_collect_active_jobs<'tcx>(tcx: TyCtxt<'tcx>, qmap: &mut QueryMap, complete: &mut bool) { + pub(crate) fn try_collect_active_jobs<'tcx>(tcx: TyCtxt<'tcx>, qmap: &mut QueryMap) -> Option<()> { let make_query = |tcx, key| { let kind = rustc_middle::dep_graph::dep_kinds::$name; let name = stringify!($name); @@ -696,12 +703,12 @@ macro_rules! define_queries { // don't `unwrap()` here, just manually check for `None` and do best-effort error // reporting. if res.is_none() { - *complete = false; tracing::warn!( "Failed to collect active jobs for query with name `{}`!", stringify!($name) ); } + res } pub(crate) fn alloc_self_profile_query_strings<'tcx>( @@ -761,7 +768,7 @@ macro_rules! define_queries { // These arrays are used for iteration and can't be indexed by `DepKind`. - const TRY_COLLECT_ACTIVE_JOBS: &[for<'tcx> fn(TyCtxt<'tcx>, &mut QueryMap, &mut bool)] = + const TRY_COLLECT_ACTIVE_JOBS: &[for<'tcx> fn(TyCtxt<'tcx>, &mut QueryMap) -> Option<()>] = &[$(query_impl::$name::try_collect_active_jobs),*]; const ALLOC_SELF_PROFILE_QUERY_STRINGS: &[ |
