5
5
use std:: num:: NonZero ;
6
6
7
7
use rustc_data_structures:: stable_hasher:: { HashStable , StableHasher } ;
8
- use rustc_data_structures:: sync:: Lock ;
9
8
use rustc_data_structures:: unord:: UnordMap ;
10
- use rustc_errors:: DiagInner ;
11
9
use rustc_hashes:: Hash64 ;
12
10
use rustc_index:: Idx ;
13
11
use rustc_middle:: bug;
@@ -26,14 +24,13 @@ use rustc_middle::ty::{self, TyCtxt};
26
24
use rustc_query_system:: dep_graph:: { DepNodeParams , HasDepContext } ;
27
25
use rustc_query_system:: ich:: StableHashingContext ;
28
26
use rustc_query_system:: query:: {
29
- QueryCache , QueryConfig , QueryContext , QueryJobId , QueryMap , QuerySideEffects , QueryStackFrame ,
27
+ QueryCache , QueryConfig , QueryContext , QueryJobId , QueryMap , QuerySideEffect , QueryStackFrame ,
30
28
force_query,
31
29
} ;
32
30
use rustc_query_system:: { QueryOverflow , QueryOverflowNote } ;
33
31
use rustc_serialize:: { Decodable , Encodable } ;
34
32
use rustc_session:: Limit ;
35
33
use rustc_span:: def_id:: LOCAL_CRATE ;
36
- use thin_vec:: ThinVec ;
37
34
38
35
use crate :: QueryConfigRestored ;
39
36
@@ -93,43 +90,31 @@ impl QueryContext for QueryCtxt<'_> {
93
90
}
94
91
95
92
// 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 > {
97
97
self . query_system
98
98
. on_disk_cache
99
99
. 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) )
102
101
}
103
102
104
103
#[ inline( never) ]
105
104
#[ 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 ) {
107
106
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)
121
108
}
122
109
}
123
110
124
111
/// 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.
127
113
#[ inline( always) ]
128
114
fn start_query < R > (
129
115
self ,
130
116
token : QueryJobId ,
131
117
depth_limit : bool ,
132
- diagnostics : Option < & Lock < ThinVec < DiagInner > > > ,
133
118
compute : impl FnOnce ( ) -> R ,
134
119
) -> R {
135
120
// The `TyCtxt` stored in TLS has the same global interner lifetime
@@ -144,7 +129,6 @@ impl QueryContext for QueryCtxt<'_> {
144
129
let new_icx = ImplicitCtxt {
145
130
tcx : self . tcx ,
146
131
query : Some ( token) ,
147
- diagnostics,
148
132
query_depth : current_icx. query_depth + depth_limit as usize ,
149
133
task_deps : current_icx. task_deps ,
150
134
} ;
@@ -501,7 +485,7 @@ where
501
485
is_anon,
502
486
is_eval_always,
503
487
fingerprint_style,
504
- force_from_dep_node : Some ( |tcx, dep_node| {
488
+ force_from_dep_node : Some ( |tcx, dep_node, _ | {
505
489
force_from_dep_node ( Q :: config ( tcx) , tcx, dep_node)
506
490
} ) ,
507
491
try_load_from_on_disk_cache : Some ( |tcx, dep_node| {
@@ -803,7 +787,7 @@ macro_rules! define_queries {
803
787
is_anon: false ,
804
788
is_eval_always: false ,
805
789
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) ) ,
807
791
try_load_from_on_disk_cache: None ,
808
792
name: & "Null" ,
809
793
}
@@ -815,12 +799,26 @@ macro_rules! define_queries {
815
799
is_anon: false ,
816
800
is_eval_always: false ,
817
801
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) ) ,
819
803
try_load_from_on_disk_cache: None ,
820
804
name: & "Red" ,
821
805
}
822
806
}
823
807
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
+
824
822
pub ( crate ) fn TraitSelect <' tcx>( ) -> DepKindStruct <' tcx> {
825
823
DepKindStruct {
826
824
is_anon: true ,
0 commit comments