@@ -394,7 +394,9 @@ fn is_eligible_for_coverage(tcx: TyCtxt<'_>, def_id: LocalDefId) -> bool {
394
394
struct ExtractedHirInfo {
395
395
function_source_hash : u64 ,
396
396
is_async_fn : bool ,
397
- fn_sig_span : Span ,
397
+ /// The span of the function's signature, extended to the start of `body_span`.
398
+ /// Must have the same context and filename as the body span.
399
+ fn_sig_span_extended : Option < Span > ,
398
400
body_span : Span ,
399
401
}
400
402
@@ -407,7 +409,8 @@ fn extract_hir_info<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> ExtractedHir
407
409
hir:: map:: associated_body ( hir_node) . expect ( "HIR node is a function with body" ) ;
408
410
let hir_body = tcx. hir ( ) . body ( fn_body_id) ;
409
411
410
- let is_async_fn = hir_node. fn_sig ( ) . is_some_and ( |fn_sig| fn_sig. header . is_async ( ) ) ;
412
+ let maybe_fn_sig = hir_node. fn_sig ( ) ;
413
+ let is_async_fn = maybe_fn_sig. is_some_and ( |fn_sig| fn_sig. header . is_async ( ) ) ;
411
414
412
415
let mut body_span = hir_body. value . span ;
413
416
@@ -423,8 +426,8 @@ fn extract_hir_info<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> ExtractedHir
423
426
424
427
// The actual signature span is only used if it has the same context and
425
428
// filename as the body, and precedes the body.
426
- let maybe_fn_sig_span = hir_node . fn_sig ( ) . map ( |fn_sig| fn_sig . span ) ;
427
- let fn_sig_span = maybe_fn_sig_span
429
+ let fn_sig_span_extended = maybe_fn_sig
430
+ . map ( |fn_sig| fn_sig . span )
428
431
. filter ( |& fn_sig_span| {
429
432
let source_map = tcx. sess . source_map ( ) ;
430
433
let file_idx = |span : Span | source_map. lookup_source_file_idx ( span. lo ( ) ) ;
@@ -434,13 +437,11 @@ fn extract_hir_info<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> ExtractedHir
434
437
&& file_idx ( fn_sig_span) == file_idx ( body_span)
435
438
} )
436
439
// If so, extend it to the start of the body span.
437
- . map ( |fn_sig_span| fn_sig_span. with_hi ( body_span. lo ( ) ) )
438
- // Otherwise, create a dummy signature span at the start of the body.
439
- . unwrap_or_else ( || body_span. shrink_to_lo ( ) ) ;
440
+ . map ( |fn_sig_span| fn_sig_span. with_hi ( body_span. lo ( ) ) ) ;
440
441
441
442
let function_source_hash = hash_mir_source ( tcx, hir_body) ;
442
443
443
- ExtractedHirInfo { function_source_hash, is_async_fn, fn_sig_span , body_span }
444
+ ExtractedHirInfo { function_source_hash, is_async_fn, fn_sig_span_extended , body_span }
444
445
}
445
446
446
447
fn hash_mir_source < ' tcx > ( tcx : TyCtxt < ' tcx > , hir_body : & ' tcx rustc_hir:: Body < ' tcx > ) -> u64 {
0 commit comments