Skip to content

Commit fe412af

Browse files
committed
coverage: Use is_eligible_for_coverage to filter unused functions
The checks in `is_eligible_for_coverage` include `is_fn_like`, but will also exclude various function-like things that cannot possibly have coverage instrumentation.
1 parent 13b77c6 commit fe412af

File tree

1 file changed

+7
-8
lines changed
  • compiler/rustc_codegen_llvm/src/coverageinfo

1 file changed

+7
-8
lines changed

compiler/rustc_codegen_llvm/src/coverageinfo/mapgen.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,15 @@ fn add_unused_functions(cx: &CodegenCx<'_, '_>) {
271271
let usage = prepare_usage_sets(tcx);
272272

273273
let is_unused_fn = |def_id: LocalDefId| -> bool {
274-
let def_id = def_id.to_def_id();
275-
276-
// To be eligible for "unused function" mappings, a definition must:
277-
// - Be function-like
274+
// Usage sets expect `DefId`, so convert from `LocalDefId`.
275+
let d: DefId = LocalDefId::to_def_id(def_id);
276+
// To be potentially eligible for "unused function" mappings, a definition must:
277+
// - Be eligible for coverage instrumentation
278278
// - Not participate directly in codegen (or have lost all its coverage statements)
279279
// - Not have any coverage statements inlined into codegenned functions
280-
tcx.def_kind(def_id).is_fn_like()
281-
&& (!usage.all_mono_items.contains(&def_id)
282-
|| usage.missing_own_coverage.contains(&def_id))
283-
&& !usage.used_via_inlining.contains(&def_id)
280+
tcx.is_eligible_for_coverage(def_id)
281+
&& (!usage.all_mono_items.contains(&d) || usage.missing_own_coverage.contains(&d))
282+
&& !usage.used_via_inlining.contains(&d)
284283
};
285284

286285
// Scan for unused functions that were instrumented for coverage.

0 commit comments

Comments
 (0)