@@ -4,12 +4,12 @@ use rustc_middle::mir::coverage::{
44} ;
55use rustc_middle:: mir:: { self , BasicBlock , StatementKind } ;
66use rustc_middle:: ty:: TyCtxt ;
7+ use rustc_span:: ExpnKind ;
78
8- use crate :: coverage:: expansion;
9+ use crate :: coverage:: expansion:: { self , ExpnTree } ;
910use crate :: coverage:: graph:: CoverageGraph ;
1011use crate :: coverage:: hir_info:: ExtractedHirInfo ;
1112use crate :: coverage:: spans:: extract_refined_covspans;
12- use crate :: coverage:: unexpand:: unexpand_into_body_span;
1313
1414#[ derive( Default ) ]
1515pub ( crate ) struct ExtractedMappings {
@@ -31,7 +31,7 @@ pub(crate) fn extract_mappings_from_mir<'tcx>(
3131 // Extract ordinary code mappings from MIR statement/terminator spans.
3232 extract_refined_covspans ( tcx, hir_info, graph, & expn_tree, & mut mappings) ;
3333
34- extract_branch_mappings ( mir_body, hir_info, graph, & mut mappings) ;
34+ extract_branch_mappings ( mir_body, hir_info, graph, & expn_tree , & mut mappings) ;
3535
3636 ExtractedMappings { mappings }
3737}
@@ -57,25 +57,25 @@ fn resolve_block_markers(
5757 block_markers
5858}
5959
60- pub ( super ) fn extract_branch_mappings (
60+ fn extract_branch_mappings (
6161 mir_body : & mir:: Body < ' _ > ,
6262 hir_info : & ExtractedHirInfo ,
6363 graph : & CoverageGraph ,
64+ expn_tree : & ExpnTree ,
6465 mappings : & mut Vec < Mapping > ,
6566) {
6667 let Some ( coverage_info_hi) = mir_body. coverage_info_hi . as_deref ( ) else { return } ;
67-
6868 let block_markers = resolve_block_markers ( coverage_info_hi, mir_body) ;
6969
70- mappings. extend ( coverage_info_hi. branch_spans . iter ( ) . filter_map (
71- |& BranchSpan { span : raw_span, true_marker, false_marker } | try {
72- // For now, ignore any branch span that was introduced by
73- // expansion. This makes things like assert macros less noisy.
74- if !raw_span. ctxt ( ) . outer_expn_data ( ) . is_root ( ) {
75- return None ;
76- }
77- let span = unexpand_into_body_span ( raw_span, hir_info. body_span ) ?;
70+ // For now, ignore any branch span that was introduced by
71+ // expansion. This makes things like assert macros less noisy.
72+ let Some ( node) = expn_tree. get ( hir_info. body_span . ctxt ( ) . outer_expn ( ) ) else { return } ;
73+ if node. expn_kind != ExpnKind :: Root {
74+ return ;
75+ }
7876
77+ mappings. extend ( node. branch_spans . iter ( ) . filter_map (
78+ |& BranchSpan { span, true_marker, false_marker } | try {
7979 let bcb_from_marker = |marker : BlockMarkerId | graph. bcb_from_bb ( block_markers[ marker] ?) ;
8080
8181 let true_bcb = bcb_from_marker ( true_marker) ?;
0 commit comments