coverage: Pass ExtractedHirInfo to make_source_region

This isn't strictly necessary, but makes it easier to distinguish `body_span`
from the specific `span` being processed.
This commit is contained in:
Zalathar 2024-11-06 13:05:21 +11:00
parent 78bb5ee79e
commit 7c76995950

View File

@ -23,7 +23,7 @@
use rustc_span::def_id::LocalDefId; use rustc_span::def_id::LocalDefId;
use rustc_span::source_map::SourceMap; use rustc_span::source_map::SourceMap;
use rustc_span::{BytePos, Pos, RelativeBytePos, Span, Symbol}; use rustc_span::{BytePos, Pos, RelativeBytePos, Span, Symbol};
use tracing::{debug, debug_span, instrument, trace}; use tracing::{debug, debug_span, trace};
use crate::coverage::counters::{CounterIncrementSite, CoverageCounters}; use crate::coverage::counters::{CounterIncrementSite, CoverageCounters};
use crate::coverage::graph::CoverageGraph; use crate::coverage::graph::CoverageGraph;
@ -154,7 +154,7 @@ fn create_mappings<'tcx>(
let term_for_bcb = let term_for_bcb =
|bcb| coverage_counters.term_for_bcb(bcb).expect("all BCBs with spans were given counters"); |bcb| coverage_counters.term_for_bcb(bcb).expect("all BCBs with spans were given counters");
let region_for_span = |span: Span| make_source_region(source_map, file_name, span, body_span); let region_for_span = |span: Span| make_source_region(source_map, hir_info, file_name, span);
// Fully destructure the mappings struct to make sure we don't miss any kinds. // Fully destructure the mappings struct to make sure we don't miss any kinds.
let ExtractedMappings { let ExtractedMappings {
@ -408,12 +408,11 @@ fn inject_statement(mir_body: &mut mir::Body<'_>, counter_kind: CoverageKind, bb
/// but it's hard to rule out entirely (especially in the presence of complex macros /// but it's hard to rule out entirely (especially in the presence of complex macros
/// or other expansions), and if it does happen then skipping a span or function is /// or other expansions), and if it does happen then skipping a span or function is
/// better than an ICE or `llvm-cov` failure that the user might have no way to avoid. /// better than an ICE or `llvm-cov` failure that the user might have no way to avoid.
#[instrument(level = "debug", skip(source_map))]
fn make_source_region( fn make_source_region(
source_map: &SourceMap, source_map: &SourceMap,
hir_info: &ExtractedHirInfo,
file_name: Symbol, file_name: Symbol,
span: Span, span: Span,
body_span: Span,
) -> Option<SourceRegion> { ) -> Option<SourceRegion> {
let lo = span.lo(); let lo = span.lo();
let hi = span.hi(); let hi = span.hi();
@ -441,6 +440,7 @@ fn make_source_region(
// worth of bytes, so that it is more visible in `llvm-cov` reports. // worth of bytes, so that it is more visible in `llvm-cov` reports.
// We do this after resolving line/column numbers, so that empty spans at the // We do this after resolving line/column numbers, so that empty spans at the
// end of a line get an extra column instead of wrapping to the next line. // end of a line get an extra column instead of wrapping to the next line.
let body_span = hir_info.body_span;
if span.is_empty() if span.is_empty()
&& body_span.contains(span) && body_span.contains(span)
&& let Some(src) = &file.src && let Some(src) = &file.src