rust/compiler
Matthias Krüger dde77f7a33
Rollup merge of #117042 - Zalathar:file-table, r=cjgillot
coverage: Emit the filenames section before encoding per-function mappings

When embedding coverage information in LLVM IR (and ultimately in the resulting binary), there are two main things that each CGU needs to emit:

- A single `__llvm_covmap` record containing a coverage header, which mostly consists of a list of filenames used by the CGU's coverage mappings.
- Several `__llvm_covfun` records, one for each instrumented function, each of which contains the hash of the list of filenames in the header.

There is a kind of loose cyclic dependency between the two: we need the hash of the file table before we can emit the covfun records, but we need to traverse all of the instrumented functions in order to build the file table.

The existing code works by processing the individual functions first. It lazily adds filenames to the file table, and stores the mostly-complete function records in a temporary list. After this it hashes the file table, emits the header (containing the file table), and then uses the hash to emit all of the function records.

This PR reverses that order: first we traverse all of the functions (without trying to prepare their function records) to build a *complete* file table, and then emit it immediately. At this point we have the file table hash, so we can then proceed to build and emit all of the function records, without needing to store them in an intermediate list.

---

Along the way, this PR makes some necessary changes that are also worthwhile in their own right:
- We split `FunctionCoverage` into distinct collector/finished phases, which neatly avoids some borrow-checker hassles when extracting a function's final expression/mapping data.
- We avoid having to re-sort a function's mappings when preparing the list of filenames that it uses.
2023-10-23 08:12:39 +02:00
..
rustc Split out the stable part of smir into its own crate to prevent accidental usage of forever unstable things 2023-09-25 14:38:27 +00:00
rustc_abi s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_arena rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_ast Uplift movability and mutability, the simple way 2023-10-19 16:42:58 +00:00
rustc_ast_lowering Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_ast_passes s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_ast_pretty Auto merge of #116822 - notriddle:notriddle/rust-logo, r=fmease 2023-10-17 04:41:20 +00:00
rustc_attr docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_baked_icu_data docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_borrowck Rollup merge of #116990 - estebank:issue-68445, r=cjgillot 2023-10-21 10:08:18 +02:00
rustc_builtin_macros Auto merge of #115324 - francorbacho:master, r=davidtwco 2023-10-23 00:51:35 +00:00
rustc_codegen_cranelift Merge commit 'c07d1e2f88' into sync_cg_clif-2023-10-21 2023-10-21 19:54:51 +00:00
rustc_codegen_gcc s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_codegen_llvm coverage: Emit the filenames section before encoding per-function mappings 2023-10-22 23:17:15 +11:00
rustc_codegen_ssa Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_const_eval Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_data_structures Initiate the inner usage of cfg_match 2023-10-19 20:18:51 -03:00
rustc_driver docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_driver_impl Auto merge of #116814 - estebank:windows-ice-path, r=petrochenkov 2023-10-18 07:45:56 +00:00
rustc_error_codes Replace all uses of generator in markdown documentation with coroutine 2023-10-20 21:14:02 +00:00
rustc_error_messages docs: add Rust logo to more compiler crates 2023-10-16 15:38:08 -07:00
rustc_errors Auto merge of #116962 - estebank:issue-63835, r=oli-obk 2023-10-20 10:52:24 +00:00
rustc_expand Mention the syntax for use on mod foo; if foo doesn't exist 2023-10-21 15:56:01 +00:00
rustc_feature Re-add generators as a removed feature and point to the new feature name 2023-10-20 21:14:02 +00:00
rustc_fluent_macro Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_fs_util Add try_canonicalize to rustc_fs_util and use it over fs::canonicalize 2023-03-16 21:50:23 +01:00
rustc_graphviz rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_hir Rename CoroutineKind::Gen to ::Coroutine 2023-10-20 21:14:01 +00:00
rustc_hir_analysis Rollup merge of #116995 - estebank:issue-69944, r=compiler-errors 2023-10-21 10:08:18 +02:00
rustc_hir_pretty Fiddle with State functions. 2023-10-11 10:46:55 +11:00
rustc_hir_typeck Rollup merge of #106601 - estebank:match-semi, r=cjgillot 2023-10-21 13:58:33 +02:00
rustc_incremental Auto merge of #115964 - bjorn3:cgu_reuse_tracker_global_state, r=cjgillot 2023-10-13 00:09:30 +00:00
rustc_index Preserve DebugInfo in DeadStoreElimination. 2023-10-06 15:46:11 +00:00
rustc_infer Rollup merge of #106601 - estebank:match-semi, r=cjgillot 2023-10-21 13:58:33 +02:00
rustc_interface s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_lexer Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_lint s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_lint_defs Auto merge of #116734 - Nadrieril:lint-per-column, r=cjgillot 2023-10-21 11:04:19 +00:00
rustc_llvm rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_log use env variable to control thread ids in rustc_log 2023-10-10 09:39:47 +08:00
rustc_macros Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_metadata s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_middle Auto merge of #116922 - Zalathar:unused, r=cjgillot 2023-10-21 16:47:30 +00:00
rustc_mir_build Fix #117033 2023-10-21 23:04:17 +02:00
rustc_mir_dataflow s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_mir_transform Rollup merge of #116974 - Zalathar:signature-spans, r=oli-obk,cjgillot 2023-10-21 10:08:17 +02:00
rustc_monomorphize coverage: Change query codegened_and_inlined_items to a plain function 2023-10-21 12:20:05 +11:00
rustc_parse s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_parse_format rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_passes s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_plugin_impl rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_privacy s/Generator/Coroutine/ 2023-10-20 21:10:38 +00:00
rustc_query_impl rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_query_system Format all the let chains in compiler 2023-10-13 08:59:36 +00:00
rustc_resolve Rollup merge of #116961 - estebank:issue-60164, r=oli-obk 2023-10-21 10:08:16 +02:00
rustc_serialize rustdoc: remove rust logo from non-Rust crates 2023-10-08 20:17:53 -07:00
rustc_session s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_smir Rollup merge of #116964 - celinval:smir-mono-body, r=oli-obk 2023-10-21 10:08:17 +02:00
rustc_span Rollup merge of #116312 - c410-f3r:try, r=Mark-Simulacrum 2023-10-21 21:22:59 +02:00
rustc_symbol_mangling s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_target update the registers of csky 2023-10-21 23:42:09 +08:00
rustc_trait_selection fix spans for removing .await on for expressions 2023-10-21 13:18:00 +02:00
rustc_traits Detect cycle errors hidden by opaques during monomorphization 2023-09-13 17:35:44 +00:00
rustc_transmute Use v0.0.0 in compiler crates 2023-10-18 21:55:15 +00:00
rustc_ty_utils s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
rustc_type_ir s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
stable_mir Rollup merge of #116964 - celinval:smir-mono-body, r=oli-obk 2023-10-21 10:08:17 +02:00