Skip to content

Commit b83cbe8

Browse files
committed
coverage: Skip instrumenting a function if no spans were extracted from MIR
1 parent e2a3c9b commit b83cbe8

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

compiler/rustc_mir_transform/src/coverage/mod.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,15 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
141141

142142
////////////////////////////////////////////////////
143143
// Compute coverage spans from the `CoverageGraph`.
144-
let coverage_spans = CoverageSpans::generate_coverage_spans(
144+
let Some(coverage_spans) = CoverageSpans::generate_coverage_spans(
145145
self.mir_body,
146146
fn_sig_span,
147147
body_span,
148148
&self.basic_coverage_blocks,
149-
);
149+
) else {
150+
// No relevant spans were found in MIR, so skip instrumenting this function.
151+
return;
152+
};
150153

151154
////////////////////////////////////////////////////
152155
// Create an optimized mix of `Counter`s and `Expression`s for the `CoverageGraph`. Ensure

compiler/rustc_mir_transform/src/coverage/spans.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,34 @@ pub(super) struct CoverageSpans {
1515
}
1616

1717
impl CoverageSpans {
18+
/// Extracts coverage-relevant spans from MIR, and associates them with
19+
/// their corresponding BCBs.
20+
///
21+
/// Returns `None` if no coverage-relevant spans could be extracted.
1822
pub(super) fn generate_coverage_spans(
1923
mir_body: &mir::Body<'_>,
2024
fn_sig_span: Span,
2125
body_span: Span,
2226
basic_coverage_blocks: &CoverageGraph,
23-
) -> Self {
27+
) -> Option<Self> {
2428
let coverage_spans = CoverageSpansGenerator::generate_coverage_spans(
2529
mir_body,
2630
fn_sig_span,
2731
body_span,
2832
basic_coverage_blocks,
2933
);
3034

35+
if coverage_spans.is_empty() {
36+
return None;
37+
}
38+
3139
// Group the coverage spans by BCB, with the BCBs in sorted order.
3240
let mut bcb_to_spans = IndexVec::from_elem_n(Vec::new(), basic_coverage_blocks.num_nodes());
3341
for CoverageSpan { bcb, span, .. } in coverage_spans {
3442
bcb_to_spans[bcb].push(span);
3543
}
3644

37-
Self { bcb_to_spans }
45+
Some(Self { bcb_to_spans })
3846
}
3947

4048
pub(super) fn bcb_has_coverage_spans(&self, bcb: BasicCoverageBlock) -> bool {

0 commit comments

Comments
 (0)