Rollup merge of #140847 - Zalathar:unused-local-file, r=SparrowLii

coverage: Detect unused local file IDs to avoid an LLVM assertion

Each function's coverage metadata contains a *local file table* that maps local file IDs (used by the function's mapping regions) to global file IDs (shared by all functions in the same CGU).

LLVM requires all local file IDs to have at least one mapping region, and has an assertion that will fail if it detects a local file ID with no regions. To make sure that assertion doesn't fire, we need to detect and skip functions whose metadata would trigger it.

(This can't actually happen yet, because currently all of a function's spans must belong to the same file and expansion. But this will be an important edge case when adding expansion region support.)
This commit is contained in:
Stuart Cook
2025-05-19 21:10:42 +10:00
committed by GitHub
16 changed files with 154 additions and 62 deletions

View File

@@ -776,7 +776,8 @@ fn test_unstable_options_tracking_hash() {
CoverageOptions {
level: CoverageLevel::Mcdc,
no_mir_spans: true,
discard_all_spans_in_codegen: true
discard_all_spans_in_codegen: true,
inject_unused_local_file: true,
}
);
tracked!(crate_attr, vec!["abc".to_string()]);