diff options
| author | Zalathar <Zalathar@users.noreply.github.com> | 2024-12-18 21:00:51 +1100 | 
|---|---|---|
| committer | Zalathar <Zalathar@users.noreply.github.com> | 2024-12-19 18:09:09 +1100 | 
| commit | 34ed51cb837d1dd755b9b97798a41c8cd0358ca6 (patch) | |
| tree | 982d077781d42c6c985f9c4b643915b72a4e372e /compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs | |
| parent | c3780e1d227d7544209e2cd722ac4fa35ac61b56 (diff) | |
| download | rust-34ed51cb837d1dd755b9b97798a41c8cd0358ca6.tar.gz rust-34ed51cb837d1dd755b9b97798a41c8cd0358ca6.zip | |
coverage: Store coverage source regions as `Span` until codegen
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs | 14 | 
1 files changed, 11 insertions, 3 deletions
| diff --git a/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs b/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs index dca1779d821..cde7a0ebc6d 100644 --- a/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs +++ b/compiler/rustc_codegen_llvm/src/coverageinfo/mapgen/covfun.rs @@ -14,11 +14,12 @@ use rustc_middle::mir::coverage::{ CovTerm, CoverageIdsInfo, Expression, FunctionCoverageInfo, Mapping, MappingKind, Op, }; use rustc_middle::ty::{Instance, TyCtxt}; +use rustc_span::Span; use rustc_target::spec::HasTargetSpec; use tracing::debug; use crate::common::CodegenCx; -use crate::coverageinfo::mapgen::{GlobalFileTable, VirtualFileMapping, span_file_name}; +use crate::coverageinfo::mapgen::{GlobalFileTable, VirtualFileMapping, span_file_name, spans}; use crate::coverageinfo::{ffi, llvm_cov}; use crate::llvm; @@ -117,6 +118,8 @@ fn fill_region_tables<'tcx>( ) { // Currently a function's mappings must all be in the same file as its body span. let file_name = span_file_name(tcx, fn_cov_info.body_span); + let source_map = tcx.sess.source_map(); + let source_file = source_map.lookup_source_file(fn_cov_info.body_span.lo()); // Look up the global file ID for that filename. let global_file_id = global_file_table.global_file_id_for_file_name(file_name); @@ -128,15 +131,20 @@ fn fill_region_tables<'tcx>( let ffi::Regions { code_regions, branch_regions, mcdc_branch_regions, mcdc_decision_regions } = &mut covfun.regions; + let make_cov_span = |span: Span| { + spans::make_coverage_span(local_file_id, source_map, fn_cov_info, &source_file, span) + }; + // For each counter/region pair in this function+file, convert it to a // form suitable for FFI. let is_zero_term = |term| !covfun.is_used || ids_info.is_zero_term(term); - for Mapping { kind, ref source_region } in &fn_cov_info.mappings { + for &Mapping { ref kind, span } in &fn_cov_info.mappings { // If the mapping refers to counters/expressions that were removed by // MIR opts, replace those occurrences with zero. let kind = kind.map_terms(|term| if is_zero_term(term) { CovTerm::Zero } else { term }); - let cov_span = ffi::CoverageSpan::from_source_region(local_file_id, source_region); + let Some(cov_span) = make_cov_span(span) else { continue }; + match kind { MappingKind::Code(term) => { code_regions | 
