1- use rustc_middle:: mir:: coverage:: FunctionCoverageInfo ;
21use rustc_span:: source_map:: SourceMap ;
32use rustc_span:: { BytePos , Pos , SourceFile , Span } ;
43use tracing:: debug;
@@ -19,11 +18,10 @@ use crate::coverageinfo::mapgen::LocalFileId;
1918pub ( 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 }
0 commit comments