Skip to content

Commit e188693

Browse files
committed
Auto merge of #84532 - richkadel:issue-83792, r=tmandry
Fix coverage ICE because fn_sig can have a span that crosses file bou… Fixes: #83792 MIR `InstrumentCoverage` assumed the `FnSig` span was contained within a single file, but this is not always the case. Some macro constructions can result in a span that starts in one `SourceFile` and ends in a different one. The `FnSig` span is included in coverage results as long as that span is in the same `SourceFile` and the same macro context, but by assuming the `FnSig` span's `hi()` and `lo()` were in the same file, I took this for granted, and checked only that the `FnSig` `hi()` was in the same `SourceFile` as the `body_span`. I actually drop the `hi()` though, and extend the `FnSig` span to the `body_span.lo()`, so I really should have simply checked that the `FnSig` span's `lo()` was in the `SourceFile` of the `body_span`. r? `@tmandry` cc: `@wesleywiser`
2 parents 22b686a + 31cba57 commit e188693

File tree

1 file changed

+1
-1
lines changed
  • compiler/rustc_mir/src/transform/coverage

1 file changed

+1
-1
lines changed

compiler/rustc_mir/src/transform/coverage/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
112112
let source_file = source_map.lookup_source_file(body_span.lo());
113113
let fn_sig_span = match some_fn_sig.filter(|fn_sig| {
114114
fn_sig.span.ctxt() == body_span.ctxt()
115-
&& Lrc::ptr_eq(&source_file, &source_map.lookup_source_file(fn_sig.span.hi()))
115+
&& Lrc::ptr_eq(&source_file, &source_map.lookup_source_file(fn_sig.span.lo()))
116116
}) {
117117
Some(fn_sig) => fn_sig.span.with_hi(body_span.lo()),
118118
None => body_span.shrink_to_lo(),

0 commit comments

Comments
 (0)