55use std:: num:: NonZero ;
66
77use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
8- use rustc_data_structures:: sync:: Lock ;
98use rustc_data_structures:: unord:: UnordMap ;
10- use rustc_errors:: DiagInner ;
119use rustc_hashes:: Hash64 ;
1210use rustc_index:: Idx ;
1311use rustc_middle:: bug;
@@ -26,14 +24,13 @@ use rustc_middle::ty::{self, TyCtxt};
2624use rustc_query_system:: dep_graph:: { DepNodeParams , HasDepContext } ;
2725use rustc_query_system:: ich:: StableHashingContext ;
2826use rustc_query_system:: query:: {
29- QueryCache , QueryConfig , QueryContext , QueryJobId , QueryMap , QuerySideEffects , QueryStackFrame ,
27+ QueryCache , QueryConfig , QueryContext , QueryJobId , QueryMap , QuerySideEffect , QueryStackFrame ,
3028 force_query,
3129} ;
3230use rustc_query_system:: { QueryOverflow , QueryOverflowNote } ;
3331use rustc_serialize:: { Decodable , Encodable } ;
3432use rustc_session:: Limit ;
3533use rustc_span:: def_id:: LOCAL_CRATE ;
36- use thin_vec:: ThinVec ;
3734
3835use crate :: QueryConfigRestored ;
3936
@@ -93,43 +90,31 @@ impl QueryContext for QueryCtxt<'_> {
9390 }
9491
9592 // Interactions with on_disk_cache
96- fn load_side_effects ( self , prev_dep_node_index : SerializedDepNodeIndex ) -> QuerySideEffects {
93+ fn load_side_effect (
94+ self ,
95+ prev_dep_node_index : SerializedDepNodeIndex ,
96+ ) -> Option < QuerySideEffect > {
9797 self . query_system
9898 . on_disk_cache
9999 . as_ref ( )
100- . map ( |c| c. load_side_effects ( self . tcx , prev_dep_node_index) )
101- . unwrap_or_default ( )
100+ . and_then ( |c| c. load_side_effect ( self . tcx , prev_dep_node_index) )
102101 }
103102
104103 #[ inline( never) ]
105104 #[ cold]
106- fn store_side_effects ( self , dep_node_index : DepNodeIndex , side_effects : QuerySideEffects ) {
105+ fn store_side_effect ( self , dep_node_index : DepNodeIndex , side_effect : QuerySideEffect ) {
107106 if let Some ( c) = self . query_system . on_disk_cache . as_ref ( ) {
108- c. store_side_effects ( dep_node_index, side_effects)
109- }
110- }
111-
112- #[ inline( never) ]
113- #[ cold]
114- fn store_side_effects_for_anon_node (
115- self ,
116- dep_node_index : DepNodeIndex ,
117- side_effects : QuerySideEffects ,
118- ) {
119- if let Some ( c) = self . query_system . on_disk_cache . as_ref ( ) {
120- c. store_side_effects_for_anon_node ( dep_node_index, side_effects)
107+ c. store_side_effect ( dep_node_index, side_effect)
121108 }
122109 }
123110
124111 /// Executes a job by changing the `ImplicitCtxt` to point to the
125- /// new query job while it executes. It returns the diagnostics
126- /// captured during execution and the actual result.
112+ /// new query job while it executes.
127113 #[ inline( always) ]
128114 fn start_query < R > (
129115 self ,
130116 token : QueryJobId ,
131117 depth_limit : bool ,
132- diagnostics : Option < & Lock < ThinVec < DiagInner > > > ,
133118 compute : impl FnOnce ( ) -> R ,
134119 ) -> R {
135120 // The `TyCtxt` stored in TLS has the same global interner lifetime
@@ -144,7 +129,6 @@ impl QueryContext for QueryCtxt<'_> {
144129 let new_icx = ImplicitCtxt {
145130 tcx : self . tcx ,
146131 query : Some ( token) ,
147- diagnostics,
148132 query_depth : current_icx. query_depth + depth_limit as usize ,
149133 task_deps : current_icx. task_deps ,
150134 } ;
@@ -501,7 +485,7 @@ where
501485 is_anon,
502486 is_eval_always,
503487 fingerprint_style,
504- force_from_dep_node : Some ( |tcx, dep_node| {
488+ force_from_dep_node : Some ( |tcx, dep_node, _ | {
505489 force_from_dep_node ( Q :: config ( tcx) , tcx, dep_node)
506490 } ) ,
507491 try_load_from_on_disk_cache : Some ( |tcx, dep_node| {
@@ -803,7 +787,7 @@ macro_rules! define_queries {
803787 is_anon: false ,
804788 is_eval_always: false ,
805789 fingerprint_style: FingerprintStyle :: Unit ,
806- force_from_dep_node: Some ( |_, dep_node| bug!( "force_from_dep_node: encountered {:?}" , dep_node) ) ,
790+ force_from_dep_node: Some ( |_, dep_node, _ | bug!( "force_from_dep_node: encountered {:?}" , dep_node) ) ,
807791 try_load_from_on_disk_cache: None ,
808792 name: & "Null" ,
809793 }
@@ -815,12 +799,26 @@ macro_rules! define_queries {
815799 is_anon: false ,
816800 is_eval_always: false ,
817801 fingerprint_style: FingerprintStyle :: Unit ,
818- force_from_dep_node: Some ( |_, dep_node| bug!( "force_from_dep_node: encountered {:?}" , dep_node) ) ,
802+ force_from_dep_node: Some ( |_, dep_node, _ | bug!( "force_from_dep_node: encountered {:?}" , dep_node) ) ,
819803 try_load_from_on_disk_cache: None ,
820804 name: & "Red" ,
821805 }
822806 }
823807
808+ pub ( crate ) fn SideEffect <' tcx>( ) -> DepKindStruct <' tcx> {
809+ DepKindStruct {
810+ is_anon: false ,
811+ is_eval_always: false ,
812+ fingerprint_style: FingerprintStyle :: Unit ,
813+ force_from_dep_node: Some ( |tcx, _, prev_index| {
814+ tcx. dep_graph. force_diagnostic_node( QueryCtxt :: new( tcx) , prev_index) ;
815+ true
816+ } ) ,
817+ try_load_from_on_disk_cache: None ,
818+ name: & "SideEffect" ,
819+ }
820+ }
821+
824822 pub ( crate ) fn TraitSelect <' tcx>( ) -> DepKindStruct <' tcx> {
825823 DepKindStruct {
826824 is_anon: true ,
0 commit comments