about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2023-12-14 13:47:26 +1100
committerZalathar <Zalathar@users.noreply.github.com>2023-12-15 10:59:32 +1100
commit684b9ea408afee07d254113d49c2426bfd2a1f8b (patch)
tree7960f4f93e02447df4b7aa5b5427102bc4003795 /compiler/rustc_mir_transform/src
parent3b610c764d1c515699fe6cb681c316a4bf772c7a (diff)
downloadrust-684b9ea408afee07d254113d49c2426bfd2a1f8b.tar.gz
rust-684b9ea408afee07d254113d49c2426bfd2a1f8b.zip
coverage: Check that the function signature span precedes the body
This will normally be true, but in cases where it's not true we're better off
not making any assumptions about the signature.
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/coverage/mod.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/rustc_mir_transform/src/coverage/mod.rs b/compiler/rustc_mir_transform/src/coverage/mod.rs
index 5944282527f..65a0924f1c9 100644
--- a/compiler/rustc_mir_transform/src/coverage/mod.rs
+++ b/compiler/rustc_mir_transform/src/coverage/mod.rs
@@ -324,14 +324,16 @@ fn extract_hir_info<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> ExtractedHir
     let body_span = get_body_span(tcx, hir_body, def_id);
 
     // The actual signature span is only used if it has the same context and
-    // filename as the body.
+    // filename as the body, and precedes the body.
     let maybe_fn_sig_span = hir_node.fn_sig().map(|fn_sig| fn_sig.span);
     let fn_sig_span = maybe_fn_sig_span
         .filter(|&fn_sig_span| {
             let source_map = tcx.sess.source_map();
             let file_idx = |span: Span| source_map.lookup_source_file_idx(span.lo());
 
-            fn_sig_span.eq_ctxt(body_span) && file_idx(fn_sig_span) == file_idx(body_span)
+            fn_sig_span.eq_ctxt(body_span)
+                && fn_sig_span.hi() <= body_span.lo()
+                && file_idx(fn_sig_span) == file_idx(body_span)
         })
         // If so, extend it to the start of the body span.
         .map(|fn_sig_span| fn_sig_span.with_hi(body_span.lo()))