coverage: Hoist special handling of async function spans
This sidesteps the normal span refinement code in cases where we know that we are only dealing with the special signature span that represents having called an async function.
This commit is contained in:
parent
dd6d7f27e4
commit
fde1702db8
2 changed files with 28 additions and 24 deletions
|
@ -23,25 +23,17 @@ pub(super) fn mir_to_initial_sorted_coverage_spans(
|
|||
hir_info: &ExtractedHirInfo,
|
||||
basic_coverage_blocks: &CoverageGraph,
|
||||
) -> Vec<CoverageSpan> {
|
||||
let &ExtractedHirInfo { is_async_fn, fn_sig_span, body_span, .. } = hir_info;
|
||||
let &ExtractedHirInfo { fn_sig_span, body_span, .. } = hir_info;
|
||||
|
||||
let mut initial_spans = vec![SpanFromMir::for_fn_sig(fn_sig_span)];
|
||||
let mut initial_spans = vec![];
|
||||
|
||||
if is_async_fn {
|
||||
// An async function desugars into a function that returns a future,
|
||||
// with the user code wrapped in a closure. Any spans in the desugared
|
||||
// outer function will be unhelpful, so just keep the signature span
|
||||
// and ignore all of the spans in the MIR body.
|
||||
} else {
|
||||
for (bcb, bcb_data) in basic_coverage_blocks.iter_enumerated() {
|
||||
initial_spans.extend(bcb_to_initial_coverage_spans(mir_body, body_span, bcb, bcb_data));
|
||||
}
|
||||
for (bcb, bcb_data) in basic_coverage_blocks.iter_enumerated() {
|
||||
initial_spans.extend(bcb_to_initial_coverage_spans(mir_body, body_span, bcb, bcb_data));
|
||||
}
|
||||
|
||||
// If no spans were extracted from the body, discard the signature span.
|
||||
// FIXME: This preserves existing behavior; consider getting rid of it.
|
||||
if initial_spans.len() == 1 {
|
||||
initial_spans.clear();
|
||||
}
|
||||
// Only add the signature span if we found at least one span in the body.
|
||||
if !initial_spans.is_empty() {
|
||||
initial_spans.push(SpanFromMir::for_fn_sig(fn_sig_span));
|
||||
}
|
||||
|
||||
initial_spans.sort_by(|a, b| basic_coverage_blocks.cmp_in_dominator_order(a.bcb, b.bcb));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue