Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit d3493e0

Browse files
authoredMar 19, 2025
Unrolled build for rust-lang#138659
Rollup merge of rust-lang#138659 - Zalathar:no-body-span, r=oli-obk coverage: Don't store a body span in `FunctionCoverageInfo` We aren't using this body span for anything truly essential, and having it around will be awkward when we eventually start to support expansion regions, since they aren't necessarily within the main body.
2 parents c4b38a5 + cc8336b commit d3493e0

11 files changed

+23
-45
lines changed
 

‎compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,14 @@ fn fill_region_tables<'tcx>(
105105
ids_info: &'tcx CoverageIdsInfo,
106106
covfun: &mut CovfunRecord<'tcx>,
107107
) {
108-
// Currently a function's mappings must all be in the same file as its body span.
108+
// Currently a function's mappings must all be in the same file, so use the
109+
// first mapping's span to determine the file.
109110
let source_map = tcx.sess.source_map();
110-
let source_file = source_map.lookup_source_file(fn_cov_info.body_span.lo());
111+
let Some(first_span) = (try { fn_cov_info.mappings.first()?.span }) else {
112+
debug_assert!(false, "function has no mappings: {:?}", covfun.mangled_function_name);
113+
return;
114+
};
115+
let source_file = source_map.lookup_source_file(first_span.lo());
111116

112117
// Look up the global file ID for that file.
113118
let global_file_id = global_file_table.global_file_id_for_file(&source_file);
@@ -118,9 +123,8 @@ fn fill_region_tables<'tcx>(
118123
let ffi::Regions { code_regions, branch_regions, mcdc_branch_regions, mcdc_decision_regions } =
119124
&mut covfun.regions;
120125

121-
let make_cov_span = |span: Span| {
122-
spans::make_coverage_span(local_file_id, source_map, fn_cov_info, &source_file, span)
123-
};
126+
let make_cov_span =
127+
|span: Span| spans::make_coverage_span(local_file_id, source_map, &source_file, span);
124128
let discard_all = tcx.sess.coverage_discard_all_spans_in_codegen();
125129

126130
// For each counter/region pair in this function+file, convert it to a

‎compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/spans.rs

+7-23
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use rustc_middle::mir::coverage::FunctionCoverageInfo;
21
use rustc_span::source_map::SourceMap;
32
use rustc_span::{BytePos, Pos, SourceFile, Span};
43
use tracing::debug;
@@ -19,11 +18,10 @@ use crate::coverageinfo::mapgen::LocalFileId;
1918
pub(crate) fn make_coverage_span(
2019
file_id: LocalFileId,
2120
source_map: &SourceMap,
22-
fn_cov_info: &FunctionCoverageInfo,
2321
file: &SourceFile,
2422
span: Span,
2523
) -> Option<ffi::CoverageSpan> {
26-
let span = ensure_non_empty_span(source_map, fn_cov_info, span)?;
24+
let span = ensure_non_empty_span(source_map, span)?;
2725

2826
let lo = span.lo();
2927
let hi = span.hi();
@@ -55,36 +53,22 @@ pub(crate) fn make_coverage_span(
5553
})
5654
}
5755

58-
fn ensure_non_empty_span(
59-
source_map: &SourceMap,
60-
fn_cov_info: &FunctionCoverageInfo,
61-
span: Span,
62-
) -> Option<Span> {
56+
fn ensure_non_empty_span(source_map: &SourceMap, span: Span) -> Option<Span> {
6357
if !span.is_empty() {
6458
return Some(span);
6559
}
6660

67-
let lo = span.lo();
68-
let hi = span.hi();
69-
70-
// The span is empty, so try to expand it to cover an adjacent '{' or '}',
71-
// but only within the bounds of the body span.
72-
let try_next = hi < fn_cov_info.body_span.hi();
73-
let try_prev = fn_cov_info.body_span.lo() < lo;
74-
if !(try_next || try_prev) {
75-
return None;
76-
}
77-
61+
// The span is empty, so try to enlarge it to cover an adjacent '{' or '}'.
7862
source_map
7963
.span_to_source(span, |src, start, end| try {
8064
// Adjusting span endpoints by `BytePos(1)` is normally a bug,
8165
// but in this case we have specifically checked that the character
8266
// we're skipping over is one of two specific ASCII characters, so
8367
// adjusting by exactly 1 byte is correct.
84-
if try_next && src.as_bytes()[end] == b'{' {
85-
Some(span.with_hi(hi + BytePos(1)))
86-
} else if try_prev && src.as_bytes()[start - 1] == b'}' {
87-
Some(span.with_lo(lo - BytePos(1)))
68+
if src.as_bytes().get(end).copied() == Some(b'{') {
69+
Some(span.with_hi(span.hi() + BytePos(1)))
70+
} else if start > 0 && src.as_bytes()[start - 1] == b'}' {
71+
Some(span.with_lo(span.lo() - BytePos(1)))
8872
} else {
8973
None
9074
}

‎compiler/rustc_middle/src/mir/coverage.rs

-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ pub struct Mapping {
194194
#[derive(TyEncodable, TyDecodable, Hash, HashStable)]
195195
pub struct FunctionCoverageInfo {
196196
pub function_source_hash: u64,
197-
pub body_span: Span,
198197

199198
/// Used in conjunction with `priority_list` to create physical counters
200199
/// and counter expressions, after MIR optimizations.

‎compiler/rustc_middle/src/mir/pretty.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -620,9 +620,8 @@ fn write_function_coverage_info(
620620
function_coverage_info: &coverage::FunctionCoverageInfo,
621621
w: &mut dyn io::Write,
622622
) -> io::Result<()> {
623-
let coverage::FunctionCoverageInfo { body_span, mappings, .. } = function_coverage_info;
623+
let coverage::FunctionCoverageInfo { mappings, .. } = function_coverage_info;
624624

625-
writeln!(w, "{INDENT}coverage body span: {body_span:?}")?;
626625
for coverage::Mapping { kind, span } in mappings {
627626
writeln!(w, "{INDENT}coverage {kind:?} => {span:?};")?;
628627
}

‎compiler/rustc_mir_transform/src/coverage/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ fn instrument_function_for_coverage<'tcx>(tcx: TyCtxt<'tcx>, mir_body: &mut mir:
107107

108108
mir_body.function_coverage_info = Some(Box::new(FunctionCoverageInfo {
109109
function_source_hash: hir_info.function_source_hash,
110-
body_span: hir_info.body_span,
111110

112111
node_flow_data,
113112
priority_list,

‎tests/mir-opt/coverage/branch_match_arms.main.InstrumentCoverage.diff

-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
debug a => _9;
2727
}
2828

29-
+ coverage body span: $DIR/branch_match_arms.rs:14:11: 21:2 (#0)
3029
+ coverage Code { bcb: bcb0 } => $DIR/branch_match_arms.rs:14:1: 15:21 (#0);
3130
+ coverage Code { bcb: bcb1 } => $DIR/branch_match_arms.rs:16:17: 16:33 (#0);
3231
+ coverage Code { bcb: bcb3 } => $DIR/branch_match_arms.rs:17:17: 17:33 (#0);

‎tests/mir-opt/coverage/instrument_coverage.bar.InstrumentCoverage.diff

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
fn bar() -> bool {
55
let mut _0: bool;
66

7-
+ coverage body span: $DIR/instrument_coverage.rs:29:18: 31:2 (#0)
8-
+ coverage Code { bcb: bcb0 } => $DIR/instrument_coverage.rs:29:1: 31:2 (#0);
7+
+ coverage Code { bcb: bcb0 } => $DIR/instrument_coverage.rs:27:1: 29:2 (#0);
98
+
109
bb0: {
1110
+ Coverage::VirtualCounter(bcb0);

‎tests/mir-opt/coverage/instrument_coverage.main.InstrumentCoverage.diff

+5-6
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77
let mut _2: bool;
88
let mut _3: !;
99

10-
+ coverage body span: $DIR/instrument_coverage.rs:14:11: 20:2 (#0)
11-
+ coverage Code { bcb: bcb0 } => $DIR/instrument_coverage.rs:14:1: 14:11 (#0);
12-
+ coverage Code { bcb: bcb1 } => $DIR/instrument_coverage.rs:16:12: 16:17 (#0);
13-
+ coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:17:13: 17:18 (#0);
14-
+ coverage Code { bcb: bcb3 } => $DIR/instrument_coverage.rs:18:10: 18:10 (#0);
15-
+ coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:20:2: 20:2 (#0);
10+
+ coverage Code { bcb: bcb0 } => $DIR/instrument_coverage.rs:13:1: 13:11 (#0);
11+
+ coverage Code { bcb: bcb1 } => $DIR/instrument_coverage.rs:15:12: 15:17 (#0);
12+
+ coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:16:13: 16:18 (#0);
13+
+ coverage Code { bcb: bcb3 } => $DIR/instrument_coverage.rs:17:10: 17:10 (#0);
14+
+ coverage Code { bcb: bcb2 } => $DIR/instrument_coverage.rs:19:2: 19:2 (#0);
1615
+
1716
bb0: {
1817
+ Coverage::VirtualCounter(bcb0);

‎tests/mir-opt/coverage/instrument_coverage.rs

-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
// EMIT_MIR instrument_coverage.main.InstrumentCoverage.diff
99
// CHECK-LABEL: fn main()
10-
// CHECK: coverage body span:
1110
// CHECK: coverage Code { bcb: bcb{{[0-9]+}} } =>
1211
// CHECK: bb0:
1312
// CHECK: Coverage::VirtualCounter
@@ -21,7 +20,6 @@ fn main() {
2120

2221
// EMIT_MIR instrument_coverage.bar.InstrumentCoverage.diff
2322
// CHECK-LABEL: fn bar()
24-
// CHECK: coverage body span:
2523
// CHECK: coverage Code { bcb: bcb{{[0-9]+}} } =>
2624
// CHECK: bb0:
2725
// CHECK: Coverage::VirtualCounter

‎tests/mir-opt/coverage/instrument_coverage_cleanup.main.CleanupPostBorrowck.diff

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
coverage branch { true: BlockMarkerId(0), false: BlockMarkerId(1) } => $DIR/instrument_coverage_cleanup.rs:14:8: 14:36 (#0)
99

10-
coverage body span: $DIR/instrument_coverage_cleanup.rs:13:11: 15:2 (#0)
1110
coverage Code { bcb: bcb0 } => $DIR/instrument_coverage_cleanup.rs:13:1: 14:36 (#0);
1211
coverage Code { bcb: bcb3 } => $DIR/instrument_coverage_cleanup.rs:14:37: 14:39 (#0);
1312
coverage Code { bcb: bcb1 } => $DIR/instrument_coverage_cleanup.rs:14:39: 14:39 (#0);

‎tests/mir-opt/coverage/instrument_coverage_cleanup.main.InstrumentCoverage.diff

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
coverage branch { true: BlockMarkerId(0), false: BlockMarkerId(1) } => $DIR/instrument_coverage_cleanup.rs:14:8: 14:36 (#0)
99

10-
+ coverage body span: $DIR/instrument_coverage_cleanup.rs:13:11: 15:2 (#0)
1110
+ coverage Code { bcb: bcb0 } => $DIR/instrument_coverage_cleanup.rs:13:1: 14:36 (#0);
1211
+ coverage Code { bcb: bcb3 } => $DIR/instrument_coverage_cleanup.rs:14:37: 14:39 (#0);
1312
+ coverage Code { bcb: bcb1 } => $DIR/instrument_coverage_cleanup.rs:14:39: 14:39 (#0);

0 commit comments

Comments
 (0)
Failed to load comments.