@@ -7,7 +7,6 @@ use crate::rustc_middle::ty::TyEncoder;
7
7
use crate :: QueryConfigRestored ;
8
8
use rustc_data_structures:: stable_hasher:: { Hash64 , HashStable , StableHasher } ;
9
9
use rustc_data_structures:: sync:: Lock ;
10
- use rustc_errors:: Diagnostic ;
11
10
use rustc_index:: Idx ;
12
11
use rustc_middle:: dep_graph:: {
13
12
self , DepKind , DepKindStruct , DepNode , DepNodeIndex , SerializedDepNodeIndex ,
@@ -20,16 +19,15 @@ use rustc_middle::ty::{self, print::with_no_queries, TyCtxt};
20
19
use rustc_query_system:: dep_graph:: { DepNodeParams , HasDepContext } ;
21
20
use rustc_query_system:: ich:: StableHashingContext ;
22
21
use rustc_query_system:: query:: {
23
- force_query, QueryCache , QueryConfig , QueryContext , QueryJobId , QueryMap , QuerySideEffects ,
24
- QueryStackFrame ,
22
+ force_query, DefIdInfo , QueryCache , QueryConfig , QueryContext , QueryJobId , QueryMap ,
23
+ QuerySideEffects , QueryStackFrame ,
25
24
} ;
26
25
use rustc_query_system:: { LayoutOfDepth , QueryOverflow } ;
27
26
use rustc_serialize:: Decodable ;
28
27
use rustc_serialize:: Encodable ;
29
28
use rustc_session:: Limit ;
30
29
use rustc_span:: def_id:: LOCAL_CRATE ;
31
30
use std:: num:: NonZeroU64 ;
32
- use thin_vec:: ThinVec ;
33
31
34
32
#[ derive( Copy , Clone ) ]
35
33
pub struct QueryCtxt < ' tcx > {
@@ -125,7 +123,7 @@ impl QueryContext for QueryCtxt<'_> {
125
123
self ,
126
124
token : QueryJobId ,
127
125
depth_limit : bool ,
128
- diagnostics : Option < & Lock < ThinVec < Diagnostic > > > ,
126
+ side_effects : Option < & Lock < QuerySideEffects > > ,
129
127
compute : impl FnOnce ( ) -> R ,
130
128
) -> R {
131
129
// The `TyCtxt` stored in TLS has the same global interner lifetime
@@ -140,7 +138,7 @@ impl QueryContext for QueryCtxt<'_> {
140
138
let new_icx = ImplicitCtxt {
141
139
tcx : self . tcx ,
142
140
query : Some ( token) ,
143
- diagnostics ,
141
+ side_effects ,
144
142
query_depth : current_icx. query_depth + depth_limit as usize ,
145
143
task_deps : current_icx. task_deps ,
146
144
} ;
@@ -172,6 +170,20 @@ impl QueryContext for QueryCtxt<'_> {
172
170
crate_name : self . crate_name ( LOCAL_CRATE ) ,
173
171
} ) ;
174
172
}
173
+
174
+ #[ tracing:: instrument( level = "trace" , skip( self ) ) ]
175
+ fn apply_side_effects ( self , side_effects : QuerySideEffects ) {
176
+ let handle = self . sess . diagnostic ( ) ;
177
+ let QuerySideEffects { diagnostics, definitions } = side_effects;
178
+
179
+ for mut diagnostic in diagnostics {
180
+ handle. emit_diagnostic ( & mut diagnostic) ;
181
+ }
182
+
183
+ for DefIdInfo { parent, data, span : _ } in definitions {
184
+ self . tcx . untracked ( ) . definitions . write ( ) . create_def ( parent, data) ;
185
+ }
186
+ }
175
187
}
176
188
177
189
pub ( super ) fn try_mark_green < ' tcx > ( tcx : TyCtxt < ' tcx > , dep_node : & dep_graph:: DepNode ) -> bool {
0 commit comments