@@ -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
12
11
use rustc_index:: Idx ;
13
12
use rustc_middle:: dep_graph:: dep_kinds;
@@ -31,7 +30,6 @@ use rustc_serialize::Encodable;
31
30
use rustc_session:: Limit ;
32
31
use rustc_span:: def_id:: LOCAL_CRATE ;
33
32
use std:: num:: NonZero ;
34
- use thin_vec:: ThinVec ;
35
33
36
34
#[ derive( Copy , Clone ) ]
37
35
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,16 @@ 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 dcx = self . dep_context ( ) . sess ( ) . dcx ( ) ;
177
+ let QuerySideEffects { diagnostics } = side_effects;
178
+
179
+ for diagnostic in diagnostics {
180
+ dcx. emit_diagnostic ( diagnostic) ;
181
+ }
182
+ }
175
183
}
176
184
177
185
pub ( super ) fn try_mark_green < ' tcx > ( tcx : TyCtxt < ' tcx > , dep_node : & dep_graph:: DepNode ) -> bool {
0 commit comments