mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Remove backwards compat for LLVM 12 coverage format
This commit is contained in:
parent
e94fab69d0
commit
9f5a933f00
@ -1,6 +1,5 @@
|
||||
use crate::common::CodegenCx;
|
||||
use crate::coverageinfo;
|
||||
use crate::errors::InstrumentCoverageRequiresLLVM12;
|
||||
use crate::llvm;
|
||||
|
||||
use llvm::coverageinfo::CounterMappingRegion;
|
||||
@ -19,8 +18,8 @@ use std::ffi::CString;
|
||||
|
||||
/// Generates and exports the Coverage Map.
|
||||
///
|
||||
/// Rust Coverage Map generation supports LLVM Coverage Mapping Format versions
|
||||
/// 5 (LLVM 12, only) and 6 (zero-based encoded as 4 and 5, respectively), as defined at
|
||||
/// Rust Coverage Map generation supports LLVM Coverage Mapping Format version
|
||||
/// 6 (zero-based encoded as 5), as defined at
|
||||
/// [LLVM Code Coverage Mapping Format](https://github.com/rust-lang/llvm-project/blob/rustc/13.0-2021-09-30/llvm/docs/CoverageMappingFormat.rst#llvm-code-coverage-mapping-format).
|
||||
/// These versions are supported by the LLVM coverage tools (`llvm-profdata` and `llvm-cov`)
|
||||
/// bundled with Rust's fork of LLVM.
|
||||
@ -33,13 +32,10 @@ use std::ffi::CString;
|
||||
pub fn finalize(cx: &CodegenCx<'_, '_>) {
|
||||
let tcx = cx.tcx;
|
||||
|
||||
// Ensure the installed version of LLVM supports at least Coverage Map
|
||||
// Version 5 (encoded as a zero-based value: 4), which was introduced with
|
||||
// LLVM 12.
|
||||
// Ensure the installed version of LLVM supports Coverage Map Version 6
|
||||
// (encoded as a zero-based value: 5), which was introduced with LLVM 13.
|
||||
let version = coverageinfo::mapping_version();
|
||||
if version < 4 {
|
||||
tcx.sess.emit_fatal(InstrumentCoverageRequiresLLVM12);
|
||||
}
|
||||
assert_eq!(version, 5, "The `CoverageMappingVersion` exposed by `llvm-wrapper` is out of sync");
|
||||
|
||||
debug!("Generating coverage map for CodegenUnit: `{}`", cx.codegen_unit.name());
|
||||
|
||||
@ -61,7 +57,7 @@ pub fn finalize(cx: &CodegenCx<'_, '_>) {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut mapgen = CoverageMapGenerator::new(tcx, version);
|
||||
let mut mapgen = CoverageMapGenerator::new(tcx);
|
||||
|
||||
// Encode coverage mappings and generate function records
|
||||
let mut function_data = Vec::new();
|
||||
@ -124,25 +120,18 @@ struct CoverageMapGenerator {
|
||||
}
|
||||
|
||||
impl CoverageMapGenerator {
|
||||
fn new(tcx: TyCtxt<'_>, version: u32) -> Self {
|
||||
fn new(tcx: TyCtxt<'_>) -> Self {
|
||||
let mut filenames = FxIndexSet::default();
|
||||
if version >= 5 {
|
||||
// LLVM Coverage Mapping Format version 6 (zero-based encoded as 5)
|
||||
// requires setting the first filename to the compilation directory.
|
||||
// Since rustc generates coverage maps with relative paths, the
|
||||
// compilation directory can be combined with the relative paths
|
||||
// to get absolute paths, if needed.
|
||||
let working_dir = tcx
|
||||
.sess
|
||||
.opts
|
||||
.working_dir
|
||||
.remapped_path_if_available()
|
||||
.to_string_lossy()
|
||||
.to_string();
|
||||
let c_filename =
|
||||
CString::new(working_dir).expect("null error converting filename to C string");
|
||||
filenames.insert(c_filename);
|
||||
}
|
||||
// LLVM Coverage Mapping Format version 6 (zero-based encoded as 5)
|
||||
// requires setting the first filename to the compilation directory.
|
||||
// Since rustc generates coverage maps with relative paths, the
|
||||
// compilation directory can be combined with the relative paths
|
||||
// to get absolute paths, if needed.
|
||||
let working_dir =
|
||||
tcx.sess.opts.working_dir.remapped_path_if_available().to_string_lossy().to_string();
|
||||
let c_filename =
|
||||
CString::new(working_dir).expect("null error converting filename to C string");
|
||||
filenames.insert(c_filename);
|
||||
Self { filenames }
|
||||
}
|
||||
|
||||
|
@ -39,10 +39,6 @@ pub(crate) struct ErrorCreatingImportLibrary<'a> {
|
||||
pub error: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(codegen_llvm_instrument_coverage_requires_llvm_12)]
|
||||
pub(crate) struct InstrumentCoverageRequiresLLVM12;
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(codegen_llvm_symbol_already_defined)]
|
||||
pub(crate) struct SymbolAlreadyDefined<'a> {
|
||||
|
@ -11,9 +11,6 @@ codegen_llvm_unknown_ctarget_feature_prefix =
|
||||
codegen_llvm_error_creating_import_library =
|
||||
Error creating import library for {$lib_name}: {$error}
|
||||
|
||||
codegen_llvm_instrument_coverage_requires_llvm_12 =
|
||||
rustc option `-C instrument-coverage` requires LLVM 12 or higher.
|
||||
|
||||
codegen_llvm_symbol_already_defined =
|
||||
symbol `{$symbol_name}` is already defined
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user