Skip to content

Commit 5dad014

Browse files
committed
Avoid code generation for ThinVec<Diagnostic>'s destructor in the query system
1 parent f16c81f commit 5dad014

File tree

4 files changed

+10
-9
lines changed

4 files changed

+10
-9
lines changed

Cargo.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -5339,9 +5339,9 @@ dependencies = [
53395339

53405340
[[package]]
53415341
name = "thin-vec"
5342-
version = "0.2.12"
5342+
version = "0.2.13"
53435343
source = "registry+https://github.com/rust-lang/crates.io-index"
5344-
checksum = "aac81b6fd6beb5884b0cf3321b8117e6e5d47ecb6fc89f414cfdcca8b2fe2dd8"
5344+
checksum = "a38c90d48152c236a3ab59271da4f4ae63d678c5d7ad6b7714d7cb9760be5e4b"
53455345

53465346
[[package]]
53475347
name = "thiserror"

compiler/rustc_query_system/src/dep_graph/graph.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -891,7 +891,7 @@ impl<D: Deps> DepGraphData<D> {
891891
insertion for {dep_node:?}"
892892
);
893893

894-
if !side_effects.is_empty() {
894+
if side_effects.maybe_any() {
895895
qcx.dep_context().dep_graph().with_query_deserialization(|| {
896896
self.emit_side_effects(qcx, dep_node_index, side_effects)
897897
});

compiler/rustc_query_system/src/query/mod.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,12 @@ pub struct QuerySideEffects {
8989
}
9090

9191
impl QuerySideEffects {
92+
/// Returns true if there might be side effects.
9293
#[inline]
93-
pub fn is_empty(&self) -> bool {
94-
let QuerySideEffects { diagnostics } = self;
95-
diagnostics.is_empty()
94+
pub fn maybe_any(&self) -> bool {
95+
// Use `has_capacity` so that the destructor for `self.diagnostics` can be skipped
96+
// if `maybe_any` is known to be false.
97+
!self.diagnostics.has_capacity()
9698
}
9799
pub fn append(&mut self, other: QuerySideEffects) {
98100
let QuerySideEffects { diagnostics } = self;

compiler/rustc_query_system/src/query/plumbing.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -531,10 +531,9 @@ where
531531

532532
prof_timer.finish_with_query_invocation_id(dep_node_index.into());
533533

534-
let diagnostics = diagnostics.into_inner();
535-
let side_effects = QuerySideEffects { diagnostics };
534+
let side_effects = QuerySideEffects { diagnostics: diagnostics.into_inner() };
536535

537-
if std::intrinsics::unlikely(!side_effects.is_empty()) {
536+
if std::intrinsics::unlikely(side_effects.maybe_any()) {
538537
if query.anon() {
539538
qcx.store_side_effects_for_anon_node(dep_node_index, side_effects);
540539
} else {

0 commit comments

Comments
 (0)