@@ -7,7 +7,6 @@ use crate::rustc_middle::ty::TyEncoder;
77use crate :: QueryConfigRestored ;
88use rustc_data_structures:: stable_hasher:: { Hash64 , HashStable , StableHasher } ;
99use rustc_data_structures:: sync:: Lock ;
10- use rustc_errors:: Diagnostic ;
1110use rustc_index:: Idx ;
1211use rustc_middle:: dep_graph:: {
1312 self , DepKind , DepKindStruct , DepNode , DepNodeIndex , SerializedDepNodeIndex ,
@@ -20,16 +19,15 @@ use rustc_middle::ty::{self, print::with_no_queries, TyCtxt};
2019use rustc_query_system:: dep_graph:: { DepNodeParams , HasDepContext } ;
2120use rustc_query_system:: ich:: StableHashingContext ;
2221use 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 ,
2524} ;
2625use rustc_query_system:: { LayoutOfDepth , QueryOverflow } ;
2726use rustc_serialize:: Decodable ;
2827use rustc_serialize:: Encodable ;
2928use rustc_session:: Limit ;
3029use rustc_span:: def_id:: LOCAL_CRATE ;
3130use std:: num:: NonZeroU64 ;
32- use thin_vec:: ThinVec ;
3331
3432#[ derive( Copy , Clone ) ]
3533pub struct QueryCtxt < ' tcx > {
@@ -125,7 +123,7 @@ impl QueryContext for QueryCtxt<'_> {
125123 self ,
126124 token : QueryJobId ,
127125 depth_limit : bool ,
128- diagnostics : Option < & Lock < ThinVec < Diagnostic > > > ,
126+ side_effects : Option < & Lock < QuerySideEffects > > ,
129127 compute : impl FnOnce ( ) -> R ,
130128 ) -> R {
131129 // The `TyCtxt` stored in TLS has the same global interner lifetime
@@ -140,7 +138,7 @@ impl QueryContext for QueryCtxt<'_> {
140138 let new_icx = ImplicitCtxt {
141139 tcx : self . tcx ,
142140 query : Some ( token) ,
143- diagnostics ,
141+ side_effects ,
144142 query_depth : current_icx. query_depth + depth_limit as usize ,
145143 task_deps : current_icx. task_deps ,
146144 } ;
@@ -172,6 +170,20 @@ impl QueryContext for QueryCtxt<'_> {
172170 crate_name : self . crate_name ( LOCAL_CRATE ) ,
173171 } ) ;
174172 }
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+ }
175187}
176188
177189pub ( super ) fn try_mark_green < ' tcx > ( tcx : TyCtxt < ' tcx > , dep_node : & dep_graph:: DepNode ) -> bool {
0 commit comments