rust/compiler
Guillaume Gomez 3b82d4640a
Rollup merge of #139966 - Zalathar:span-merge, r=oli-obk
coverage: Only merge adjacent coverage spans

For a long time, coverage instrumentation has automatically “merged” spans with the same control-flow into a smaller number of larger spans, even when the spans being merged are not overlapping or adjacent. This causes any source text between the original spans to be included in the merged span, which is then associated with an execution count when shown in coverage reports.

That approach causes a number of problems:
- The intervening source text can contain all sorts of things that shouldn't really be marked as executable code (e.g. nested items, parts of macro invocations, long comments). In some cases we have complicated workarounds (e.g. bucketing to avoid merging spans across nested items), but in other cases there isn't much we can do.
- Merging can have aesthetically weird effects, such as including unbalanced parentheses, because the merging process doesn't really understand what it's doing at a source code level.
- It generally leads to an accumulation of piled-on heuristics and special cases that give decent-looking results, but are fiendishly difficult to modify or replace.

Therefore, this PR aims to abolish the merging of non-adjacent coverage spans.

The big tradeoff here is that the resulting coverage metadata (embedded in the instrumented binary) tends to become larger, because the overall number of distinct spans has increased. That's unfortunate, but I see it as the inevitable cost of cleaning up the messes and inaccuracies that were caused by the old approach. And the resulting spans do tend to be more accurate to the program's actual control-flow.

---

The `.coverage` snapshot changes give an indication of how this PR will affect user-visible coverage reports. In many cases the changes to reporting are minor or even nonexistent, despite substantial changes to the metadata (as indicated by `.cov-map` snapshots).

---

try-job: aarch64-gnu
2025-05-06 19:27:39 +02:00
..
rustc Revert "Use workspace lints for crates in compiler/ #138084" 2025-03-10 18:12:47 +08:00
rustc_abi Initial UnsafePinned/UnsafeUnpin impl [Part 1: Libs] 2025-04-13 01:11:04 -04:00
rustc_arena Introduce Arena::try_alloc_from_iter. 2025-04-19 01:13:18 +00:00
rustc_ast Add useful comments on ExprKind::If variants. 2025-05-02 15:53:39 +10:00
rustc_ast_ir Use -Wunused_crate_dependencies for compiler crates. 2025-03-20 08:59:43 +11:00
rustc_ast_lowering Auto merge of #140453 - Zoxc:next-disambiguator, r=oli-obk 2025-05-05 11:50:43 +00:00
rustc_ast_passes Rollup merge of #140035 - fee1-dead-contrib:push-oszwkkvmpkks, r=jieyouxu,wesleywiser 2025-05-06 16:28:39 +10:00
rustc_ast_pretty Initial support for dynamically linked crates 2025-05-04 22:03:15 +03:00
rustc_attr_data_structures Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_attr_parsing Simplify LazyAttrTokenStream. 2025-04-30 07:10:56 +10:00
rustc_baked_icu_data Add unreachable_pub to RUSTC_LINT_FLAGS for compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_borrowck Rollup merge of #140605 - lcnr:defer-opaque-type-error, r=compiler-errors 2025-05-05 21:32:33 +02:00
rustc_builtin_macros Rollup merge of #140312 - nnethercote:DelimArgs-spacing, r=petrochenkov 2025-04-30 10:18:26 +02:00
rustc_codegen_cranelift Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
rustc_codegen_gcc Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
rustc_codegen_llvm Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
rustc_codegen_ssa Rollup merge of #140634 - smrobtzz:mips-elf-fixes, r=workingjubilee 2025-05-06 16:28:42 +10:00
rustc_const_eval Auto merge of #140453 - Zoxc:next-disambiguator, r=oli-obk 2025-05-05 11:50:43 +00:00
rustc_data_structures Auto merge of #139965 - amandasystems:marginally-improved-scc-annotations, r=lcnr 2025-05-01 16:04:19 +00:00
rustc_driver Remove recursion_limit increases. 2025-04-02 16:25:27 +11:00
rustc_driver_impl Rollup merge of #140532 - celinval:chores-smir-ra, r=oli-obk 2025-05-06 16:28:41 +10:00
rustc_error_codes resolve: Support imports of associated types and glob imports from traits 2025-05-02 15:59:38 +03:00
rustc_error_messages update cfgs 2025-04-09 12:29:59 +01:00
rustc_errors Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_expand Make attribute safety validation logic more obvious 2025-05-04 21:44:50 +08:00
rustc_feature Rollup merge of #140035 - fee1-dead-contrib:push-oszwkkvmpkks, r=jieyouxu,wesleywiser 2025-05-06 16:28:39 +10:00
rustc_fluent_macro Replace proc_macro::SourceFile by Span::{file, local_file}. 2025-04-11 15:07:08 +02:00
rustc_fs_util Retry if creating temp fails with access denied 2025-04-25 11:28:36 +00:00
rustc_graphviz Remove #![warn(unreachable_pub)] from all compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_hashes Revert "Use workspace lints for crates in compiler/ #138084" 2025-03-10 18:12:47 +08:00
rustc_hir Auto merge of #140453 - Zoxc:next-disambiguator, r=oli-obk 2025-05-05 11:50:43 +00:00
rustc_hir_analysis Rollup merge of #140672 - compiler-errors:deeply-normalize, r=lcnr 2025-05-05 21:32:35 +02:00
rustc_hir_pretty Avoid an indent for labelled loops. 2025-05-03 12:46:51 +10:00
rustc_hir_typeck Auto merge of #140702 - GuillaumeGomez:rollup-rpyxs20, r=GuillaumeGomez 2025-05-06 13:42:09 +00:00
rustc_incremental Replace infallible name_or_empty methods with fallible name methods. 2025-04-17 09:50:52 +10:00
rustc_index Add copy_within to IndexSlice 2025-04-15 10:44:28 -04:00
rustc_index_macros In rustc_mir_tranform, iterate over index newtypes instead of ints 2025-04-12 11:53:07 +00:00
rustc_infer Rollup merge of #140559 - rperier:type-ir-to-type-middle, r=compiler-errors 2025-05-05 21:32:32 +02:00
rustc_interface Initial support for dynamically linked crates 2025-05-04 22:03:15 +03:00
rustc_lexer Implement RFC 3503: frontmatters 2025-05-05 23:10:08 +08:00
rustc_lint Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
rustc_lint_defs Update lint-docs to default to Rust 2024 2025-04-26 14:08:58 -07:00
rustc_llvm PassWrapper: adapt for llvm/llvm-project@f137c3d592 2025-05-01 17:59:00 +00:00
rustc_log Allow linking rustc and rustdoc against the same single tracing crate 2025-05-03 10:18:50 -07:00
rustc_macros Rename rustc_query_append! to rustc_with_all_queries! 2025-04-29 20:48:51 +10:00
rustc_metadata Rollup merge of #139550 - Urgau:rmeta-remap-path-scope, r=nnethercote 2025-05-06 16:28:38 +10:00
rustc_middle Auto merge of #131160 - ismailarilik:handle-potential-query-instability-lint-for-rustc-middle, r=oli-obk 2025-05-06 01:36:23 +00:00
rustc_mir_build Initial support for dynamically linked crates 2025-05-04 22:03:15 +03:00
rustc_mir_dataflow AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_mir_transform coverage: Handle hole spans without dividing spans into buckets 2025-05-06 20:42:40 +10:00
rustc_monomorphize Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
rustc_next_trait_solver Set groundwork for proper const normalization 2025-05-01 20:05:02 +01:00
rustc_parse Rollup merge of #140035 - fee1-dead-contrib:push-oszwkkvmpkks, r=jieyouxu,wesleywiser 2025-05-06 16:28:39 +10:00
rustc_parse_format Just suggest positional arg and adjust issue0139104 ui test 2025-05-03 22:39:43 +08:00
rustc_passes Initial support for dynamically linked crates 2025-05-04 22:03:15 +03:00
rustc_pattern_analysis Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_privacy Rollup merge of #140249 - BoxyUwU:remove_weak_alias_terminology, r=oli-obk 2025-04-28 13:30:45 +02:00
rustc_query_impl Auto merge of #140145 - Zoxc:job-server-proxy, r=SparrowLii 2025-05-01 04:11:52 +00:00
rustc_query_system Add some comments 2025-04-29 12:04:33 +02:00
rustc_resolve Auto merge of #131160 - ismailarilik:handle-potential-query-instability-lint-for-rustc-middle, r=oli-obk 2025-05-06 01:36:23 +00:00
rustc_sanitizers Add DefPathData::NestedStatic instead of reusing DefPathData::AnonConst 2025-05-02 13:36:55 +02:00
rustc_serialize Zero the buffer passed from write_with 2025-04-25 07:14:27 +02:00
rustc_session Rollup merge of #139550 - Urgau:rmeta-remap-path-scope, r=nnethercote 2025-05-06 16:28:38 +10:00
rustc_smir Rename Instance::new to Instance::new_raw and add a note that it is raw 2025-05-05 13:17:35 +00:00
rustc_span Rollup merge of #140035 - fee1-dead-contrib:push-oszwkkvmpkks, r=jieyouxu,wesleywiser 2025-05-06 16:28:39 +10:00
rustc_symbol_mangling Rollup merge of #140374 - compiler-errors:global_asm-bug, r=lcnr 2025-05-05 21:32:32 +02:00
rustc_target Apply suggestions from code review 2025-05-05 12:34:09 -04:00
rustc_trait_selection Rollup merge of #140605 - lcnr:defer-opaque-type-error, r=compiler-errors 2025-05-05 21:32:33 +02:00
rustc_traits Set groundwork for proper const normalization 2025-05-01 20:05:02 +01:00
rustc_transmute Rollup merge of #140509 - tmiasko:merge-contiguous-ranges, r=jswrenn 2025-05-02 19:37:56 +02:00
rustc_ty_utils Rollup merge of #140374 - compiler-errors:global_asm-bug, r=lcnr 2025-05-05 21:32:32 +02:00
rustc_type_ir Set groundwork for proper const normalization 2025-05-01 20:05:02 +01:00
rustc_type_ir_macros Split TypeFolder and FallibleTypeFolder 2025-04-15 18:30:35 +00:00
stable_mir Change rustc_driver dependency on stable_mir crate 2025-04-30 15:39:52 -07:00