File tree Expand file tree Collapse file tree 3 files changed +9
-6
lines changed
rustc_query_system/src/query Expand file tree Collapse file tree 3 files changed +9
-6
lines changed Original file line number Diff line number Diff line change @@ -380,8 +380,6 @@ impl<'sess> OnDiskCache<'sess> {
380380 /// Stores a `QuerySideEffects` emitted during the current compilation session.
381381 /// Anything stored like this will be available via `load_side_effects` in
382382 /// the next compilation session.
383- #[ inline( never) ]
384- #[ cold]
385383 pub fn store_side_effects ( & self , dep_node_index : DepNodeIndex , side_effects : QuerySideEffects ) {
386384 let mut current_side_effects = self . current_side_effects . borrow_mut ( ) ;
387385 let prev = current_side_effects. insert ( dep_node_index, side_effects) ;
@@ -405,8 +403,6 @@ impl<'sess> OnDiskCache<'sess> {
405403 /// Since many anonymous queries can share the same `DepNode`, we aggregate
406404 /// them -- as opposed to regular queries where we assume that there is a
407405 /// 1:1 relationship between query-key and `DepNode`.
408- #[ inline( never) ]
409- #[ cold]
410406 pub fn store_side_effects_for_anon_node (
411407 & self ,
412408 dep_node_index : DepNodeIndex ,
Original file line number Diff line number Diff line change @@ -79,12 +79,16 @@ impl QueryContext for QueryCtxt<'_> {
7979 . unwrap_or_default ( )
8080 }
8181
82+ #[ inline( never) ]
83+ #[ cold]
8284 fn store_side_effects ( self , dep_node_index : DepNodeIndex , side_effects : QuerySideEffects ) {
8385 if let Some ( c) = self . queries . on_disk_cache . as_ref ( ) {
8486 c. store_side_effects ( dep_node_index, side_effects)
8587 }
8688 }
8789
90+ #[ inline( never) ]
91+ #[ cold]
8892 fn store_side_effects_for_anon_node (
8993 self ,
9094 dep_node_index : DepNodeIndex ,
Original file line number Diff line number Diff line change @@ -464,15 +464,18 @@ where
464464
465465 prof_timer. finish_with_query_invocation_id ( dep_node_index. into ( ) ) ;
466466
467- let diagnostics = diagnostics. into_inner ( ) ;
468- let side_effects = QuerySideEffects { diagnostics } ;
467+ let side_effects = QuerySideEffects { diagnostics : diagnostics. into_inner ( ) } ;
469468
470469 if std:: intrinsics:: unlikely ( !side_effects. is_empty ( ) ) {
471470 if Q :: ANON {
472471 qcx. store_side_effects_for_anon_node ( dep_node_index, side_effects) ;
473472 } else {
474473 qcx. store_side_effects ( dep_node_index, side_effects) ;
475474 }
475+ } else {
476+ // Avoid generating code for the destructor here. This does not leak memory since
477+ // `QuerySideEffects` only owns memory if it's non-empty.
478+ mem:: forget ( side_effects) ;
476479 }
477480
478481 ( result, dep_node_index)
You can’t perform that action at this time.
0 commit comments