Commit graph

147508 commits

Author SHA1 Message Date
Jakub Beránek
e25735908f
Skip jobs based on the active channel in Python 2024-04-24 11:11:16 +02:00
Jakub Beránek
2a7fe14acd
Use a type alias for a CI job 2024-04-24 11:09:42 +02:00
bors
e7da0fa62f Auto merge of #124175 - Kobzol:ci-dynamic-job, r=pietroalbini
CI: dynamic jobs

This PR modifies our CI workflows to be dynamic. This means that when a GitHub event is generated, we will run a Python script (`calculate-job-matrix.py`), which decides which CI jobs should be generated. These jobs are defined in `src/ci/github-actions/jobs.yml`).

This should provide a few benefits:
- Once the migration to dynamic jobs is complete, we shouldn't need `expand-yaml-anchors` anymore.
- The job table on PRs (and also the left job column on auto/try builds) should be much cleaner and contain only the jobs that are actually relevant/executed.
- It should be much easier to support dynamic try builds, i.e. to run an arbitrary CI job on a try build.

See [this Zulip discussion](https://rust-lang.zulipchat.com/#narrow/stream/242791-t-infra/topic/job.20matrix.20re-ordered.20PR.20list) for more context.

r? `@ghost`
2024-04-24 06:40:14 +00:00
Weihang Lo
b09a97aea8
Update cargo 2024-04-23 20:50:00 -04:00
bors
40dcd796d0 Auto merge of #124302 - matthiaskrgr:rollup-2aya8n8, r=matthiaskrgr
Rollup of 3 pull requests

Successful merges:

 - #124003 (Dellvmize some intrinsics (use `u32` instead of `Self` in some integer intrinsics))
 - #124169 (Don't fatal when calling `expect_one_of` when recovering arg in `parse_seq`)
 - #124286 (Subtree sync for rustc_codegen_cranelift)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-04-23 18:23:46 +00:00
Matthias Krüger
a760954ca9
Rollup merge of #124286 - bjorn3:sync_cg_clif-2024-04-23, r=bjorn3
Subtree sync for rustc_codegen_cranelift

This fixes a crash when compiling the standard library. In addition the Cranelift update fixes all the 128bit int abi incompatibility between cg_clif and cg_llvm.

r? ``@ghost``

``@rustbot`` label +A-codegen +A-cranelift +T-compiler
2024-04-23 20:17:52 +02:00
Matthias Krüger
918304b190
Rollup merge of #124003 - WaffleLapkin:dellvmization, r=scottmcm,RalfJung,antoyo
Dellvmize some intrinsics (use `u32` instead of `Self` in some integer intrinsics)

This implements https://github.com/rust-lang/compiler-team/issues/693 minus what was implemented in #123226.

Note: I decided to _not_ change `shl`/... builder methods, as it just doesn't seem worth it.

r? ``@scottmcm``
2024-04-23 20:17:51 +02:00
León Orell Valerian Liehr
5ff1fa9921
Rollup merge of #124285 - ferrocene:unstable-L-rust-builtin, r=petrochenkov
Mark `@RUSTC_BUILTIN` search path usage as unstable

Follow up to https://github.com/rust-lang/rust/pull/121843

r? `@petrochenkov`
2024-04-23 17:25:17 +02:00
Matthias Krüger
57dad1d75e
Rollup merge of #124099 - voidc:disallow-ambiguous-expr-attrs, r=davidtwco
Disallow ambiguous attributes on expressions

This implements the suggestion in [#15701](https://github.com/rust-lang/rust/issues/15701#issuecomment-2033124217) to disallow ambiguous outer attributes on expressions. This should resolve one of the concerns blocking the stabilization of `stmt_expr_attributes`.
2024-04-23 12:10:26 +02:00
bjorn3
7c968a2108 Update allowed cg_clif deps 2024-04-23 09:55:12 +00:00
Lukas Wirth
481515500a Mark @RUSTC_BUILTIN search path usage as unstable 2024-04-23 11:01:47 +02:00
Jakub Beránek
2632c6139d
Fix empty job matrix 2024-04-23 09:01:51 +02:00
Jakub Beránek
162892b030
Make separate envs for try and auto builds 2024-04-23 08:55:35 +02:00
Jakub Beránek
2f2d59dd06
Fix image field in auto jobs 2024-04-23 08:53:07 +02:00
Jakub Beránek
c251abc7ec
Load GitHub context from environment variables 2024-04-23 08:52:28 +02:00
bors
c67277301c Auto merge of #124277 - matthiaskrgr:rollup-zdb93i4, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #123680 (Deny gen keyword in `edition_2024_compat` lints)
 - #124057 (Fix ICE when ADT tail has type error)
 - #124168 (Use `DefiningOpaqueTypes::Yes` in rustdoc, where the `InferCtxt` is guaranteed to have no opaque types it can define)
 - #124197 (Move duplicated code in functions in `tests/rustdoc-gui/notable-trait.goml`)
 - #124200 (Improve handling of expr->field errors)
 - #124220 (Miri: detect wrong vtables in wide pointers)
 - #124266 (remove an unused type from the reentrant lock tests)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-04-23 06:23:20 +00:00
Matthias Krüger
8039488e59
Rollup merge of #124220 - RalfJung:interpret-wrong-vtable, r=oli-obk
Miri: detect wrong vtables in wide pointers

Fixes https://github.com/rust-lang/miri/issues/3497.
Needed to catch the UB that https://github.com/rust-lang/rust/pull/123572 will start exploiting.

r? `@oli-obk`
2024-04-23 06:24:57 +02:00
Matthias Krüger
d5cfc5c07a
Rollup merge of #123680 - compiler-errors:gen-kw, r=Nadrieril
Deny gen keyword in `edition_2024_compat` lints

Splits the `keyword_idents` lint into two -- `keyword_idents_2018` and `keyword_idents_2024` -- since each corresponds to a future-compat warning in a different edition. Group these together into a new `keyword_idents` lint group, and add the latter to the `rust_2024_compatibility` so that `gen` is ready for the 2024 edition.

cc `@traviscross` `@ehuss`
2024-04-23 06:24:55 +02:00
bors
a77f76e263 Auto merge of #123992 - compiler-errors:no-has-typeck-results, r=jackh726
`has_typeck_results` doesnt need to be a query

self-explanatory
2024-04-23 04:13:33 +00:00
bors
aca749eefc Auto merge of #121801 - zetanumbers:async_drop_glue, r=oli-obk
Add simple async drop glue generation

This is a prototype of the async drop glue generation for some simple types. Async drop glue is intended to behave very similar to the regular drop glue except for being asynchronous. Currently it does not execute synchronous drops but only calls user implementations of `AsyncDrop::async_drop` associative function and awaits the returned future. It is not complete as it only recurses into arrays, slices, tuples, and structs and does not have same sensible restrictions as the old `Drop` trait implementation like having the same bounds as the type definition, while code assumes their existence (requires a future work).

This current design uses a workaround as it does not create any custom async destructor state machine types for ADTs, but instead uses types defined in the std library called future combinators (deferred_async_drop, chain, ready_unit).

Also I recommend reading my [explainer](https://zetanumbers.github.io/book/async-drop-design.html).

This is a part of the [MCP: Low level components for async drop](https://github.com/rust-lang/compiler-team/issues/727) work.

Feature completeness:

 - [x] `AsyncDrop` trait
 - [ ] `async_drop_in_place_raw`/async drop glue generation support for
   - [x] Trivially destructible types (integers, bools, floats, string slices, pointers, references, etc.)
   - [x] Arrays and slices (array pointer is unsized into slice pointer)
   - [x] ADTs (enums, structs, unions)
   - [x] tuple-like types (tuples, closures)
   - [ ] Dynamic types (`dyn Trait`, see explainer's [proposed design](https://github.com/zetanumbers/posts/blob/main/async-drop-design.md#async-drop-glue-for-dyn-trait))
   - [ ] coroutines (https://github.com/rust-lang/rust/pull/123948)
 - [x] Async drop glue includes sync drop glue code
 - [x] Cleanup branch generation for `async_drop_in_place_raw`
 - [ ] Union rejects non-trivially async destructible fields
 - [ ] `AsyncDrop` implementation requires same bounds as type definition
 - [ ] Skip trivially destructible fields (optimization)
 - [ ] New [`TyKind::AdtAsyncDestructor`](https://github.com/zetanumbers/posts/blob/main/async-drop-design.md#adt-async-destructor-types) and get rid of combinators
 - [ ] [Synchronously undroppable types](https://github.com/zetanumbers/posts/blob/main/async-drop-design.md#exclusively-async-drop)
 - [ ] Automatic async drop at the end of the scope in async context
2024-04-23 02:10:23 +00:00
bors
9cf10bcf5b Auto merge of #124271 - GuillaumeGomez:rollup-7st9wd7, r=GuillaumeGomez
Rollup of 7 pull requests

Successful merges:

 - #115913 (checked_ilog: improve performance)
 - #124178 ([cleanup] [llvm backend] Prevent creating the same `Instance::mono` multiple times)
 - #124183 (Stop taking `ParamTy`/`ParamConst`/`EarlyParamRegion`/`AliasTy` by ref)
 - #124217 (coverage: Prepare for improved branch coverage)
 - #124230 (Stabilize generic `NonZero`.)
 - #124252 (Improve ICE message for forbidden dep-graph reads.)
 - #124268 (Update books)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-04-23 00:05:31 +00:00
Guillaume Gomez
000d0f9116
Rollup merge of #124268 - rustbot:docs-update, r=ehuss
Update books

## rust-lang/book

41 commits in 3131aa4642c627a24f523c82566b94a7d920f68c..d207d894cc5e1d496ab99beeacd1a420e5d4d238
2024-04-19 19:48:19 UTC to 2024-04-08 19:34:07 UTC

- Ch. 2: intentionally use `{}` at first (rust-lang/book#3898)
- Inline fmt lints for `redirects/` (rust-lang/book#3897)
- ch12-03: `expect` is not used multitude times by this chapter (rust-lang/book#3287)
- Inline format args to `tools/src` (rust-lang/book#3896)
- Improve awkward phrasing around the kinds of closures (rust-lang/book#3290)
- Ch. 14: clarify workspace dependency reuse (rust-lang/book#3890)
- Edit on line no. 153. Replaced fn add_to_waitlist with fn eat_at_restaurant.  (rust-lang/book#3281)
- Ch. 2: less ambiguity about numbers (rust-lang/book#3895)
- Clarified first slices paragraph (rust-lang/book#3363)
- Inline all format arguments (rust-lang/book#3385)
- Use v1.58 captured ident formatting in examples (rust-lang/book#3048)
- Revert "ch18-03: Guarded match arm exhaustivness clarification" (rust-lang/book#3894)
- Ch. 18: further clarify about irrefutable patterns (rust-lang/book#3893)
- ch18-02: Minor corrections (rust-lang/book#3381)
- Make style of listings 9-7 and 9-8 consistent with 9-6 (rust-lang/book#3217)
- ch18-03: Guarded match arm exhaustivness clarification (rust-lang/book#3397)
- ch11-03: Unnecessary import removal (rust-lang/book#3284)
- Update ch20-01-single-threaded.md (rust-lang/book#3394)
- In Appendix D, adds hyperlink to Appendix E (rust-lang/book#3418)
- Chapter 13-03 fixed Iterator 'type' to 'trait' (rust-lang/book#3433)
- Fix the expected substring in ch11-01 (rust-lang/book#3534)
- Ch. 17: clarify 'in order to compile' (rust-lang/book#3892)
- Revert "Chapter 15-05: Fix incorrect interpretation of compiler error" (rust-lang/book#3891)
- Chapter 15-05: Fix incorrect interpretation of compiler error (rust-lang/book#3501)
- Remove direction to authenticate with `cargo login {API token}` (rust-lang/book#3506)
- Update syn dependencies in Chapter 19 to 2.0 (rust-lang/book#3888)
- Chapter 3: Clarify `return` vs. `break`. (rust-lang/book#3889)
- Fix "`Display` type" to "`Display` trait" in ch19-03 (rust-lang/book#3835)
- Update listings in ch 11-01 to reflect current output from cargo new (rust-lang/book#3533)
- Fix "`test` module" to "`tests` module" in ch11-03 (rust-lang/book#3579)
- Ch. 2: fix wording about `cargo update` (rust-lang/book#3882)
- Remove hebrew niqqud in 8-14 String::from example (rust-lang/book#3648)
- Ch. 16: fix a grammar issue (rust-lang/book#3881)
- Update MSVC instructions (rust-lang/book#3616)
- Replace RLS with rust-analyzer in ch00 (rust-lang/book#3546)
- Fix em dashes (rust-lang/book#3570)
- Revert #3711 (rust-lang/book#3880)
- Procedure Macro: Update dependencies  (rust-lang/book#3631)
- Parity with rustup's help (rust-lang/book#3642)
- Fix confusing sentence (rust-lang/book#3877)
- Ch. 7: add a note about the need for `pub` in one more place (rust-lang/book#3879)

## rust-lang/edition-guide

2 commits in eb3eb80e106d03250c1fb7c5666b1c8c59672862..0c68e90acaae5a611f8f5098a3c2980de9845ab2
2024-04-16 21:23:55 UTC to 2024-04-15 16:05:32 UTC

- Document RustcEncodable/RustcDecodable (rust-lang/edition-guide#298)
- Flesh out detail behind disallowing refs to static mut (rust-lang/edition-guide#299)

## rust-lang/reference

5 commits in 55694913b1301cc809f9bf4a1ad1b3d6920efbd9..5854fcc286557ad3ab34d325073d11d8118096b6
2024-04-21 13:47:07 UTC to 2024-04-15 16:12:40 UTC

- Stabilize Wasm target features that are in phase 4 and 5 (rust-lang/reference#1420)
- Expand and clarify primitive alignment (rust-lang/reference#1493)
- Update clone reference to include closures (rust-lang/reference#1492)
- Document how `non_exhaustive` interacts with tuple and unit-like structs. (rust-lang/reference#1491)
- Fix link to RISC-V Zkt spec; it was pointing to Zkr (rust-lang/reference#1490)

## rust-lang/rustc-dev-guide

4 commits in b77a34bd46399687b4ce6a17198e9f316c988794..07425fed36b00e60341c5e29e28d37d40cbd4451
2024-04-13 15:16:44 UTC to 2024-04-08 19:00:54 UTC

- Add a note about checks with multiple revisions (rust-lang/rustc-dev-guide#1963)
- compiletest: clarify that headers must be one header per line (rust-lang/rustc-dev-guide#1962)
- chore: fix some typos in conments (rust-lang/rustc-dev-guide#1961)
- compiletest: specify which special env var and which particular CI job (rust-lang/rustc-dev-guide#1960)
2024-04-22 20:26:01 +02:00
Guillaume Gomez
6a326d889a
Rollup merge of #124230 - reitermarkus:generic-nonzero-stable, r=dtolnay
Stabilize generic `NonZero`.

Tracking issue: https://github.com/rust-lang/rust/issues/120257

r? `@dtolnay`
2024-04-22 20:26:00 +02:00
Ralf Jung
8d5c47f17f miri libstd tests: test windows-msvc instead of windows-gnu 2024-04-22 19:50:09 +02:00
rustbot
9ed562f9e7 Update books 2024-04-22 13:00:54 -04:00
Markus Reiter
33e68aadc9
Stabilize generic NonZero. 2024-04-22 18:48:47 +02:00
Michael Goulet
7789874e6e Deny gen keyword in edition_2024_compat lints 2024-04-22 11:51:50 -04:00
bors
7f2fc33da6 Auto merge of #115120 - icedrocket:ignore-strip-on-msvc, r=michaelwoerister
Ignore `-C strip` on MSVC

tl;dr - Define `-Cstrip` to only ever affect the binary; no other build artifacts.

This is necessary to improve cross-platform behavior consistency: if someone wanted debug information to be contained only in separate files on all platforms, they would set `-Cstrip=symbols` and `-Csplit-debuginfo=packed`, but this would result in no PDB files on MSVC.

Resolves #114215
2024-04-22 12:05:39 +00:00
Jubilee Young
9470e05550 bootstrap: Promote some build_steps comments to docs 2024-04-21 18:55:53 -07:00
Matthias Krüger
3315bf961d
Rollup merge of #124235 - c410-f3r:tests98765, r=jieyouxu
Move some tests

r? `@petrochenkov`
2024-04-21 21:56:34 +02:00
Caio
3aaa3941fd Move some tests 2024-04-21 15:43:43 -03:00
Mateusz Mikuła
6ae761cd40 Add gnullvm targets to manifest 2024-04-21 17:41:42 +02:00
bors
aa31bad26b Auto merge of #124222 - GuillaumeGomez:rollup-ws1zju7, r=GuillaumeGomez
Rollup of 4 pull requests

Successful merges:

 - #124069 (enable clippy for bootstrap on CI PRs (in `mingw-check` image))
 - #124089 (Fix watchOS and visionOS for pread64 and pwrite64 calls)
 - #124184 (Suggest using `unsigned_abs` in `abs` documentation)
 - #124198 (Flip spans for precise capturing syntax not capturing a ty/const param, and for implicit captures of lifetime params)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-04-21 13:05:45 +00:00
Guillaume Gomez
f122a5129c
Rollup merge of #124069 - onur-ozkan:run-clippy-on-bootstrap, r=albertlarsan68
enable clippy for bootstrap on CI PRs (in `mingw-check` image)

Let's keep the bootstrap codebase cleaner.
2024-04-21 13:30:24 +02:00
Ralf Jung
875f0c2da0 Miri: detect wrong vtables in wide pointers 2024-04-21 13:04:51 +02:00
bors
fecb7b4309 Auto merge of #124193 - RalfJung:miri, r=RalfJung
Miri subtree update

r? `@ghost`
2024-04-21 11:01:46 +00:00
Ralf Jung
ae37b6ec58 the mir-validation ICE test behaves strangely on Windows hosts
let's just disable it there, this code is not platform-dependent anyway
2024-04-21 12:36:16 +02:00
bors
426a698606 Auto merge of #123981 - Kobzol:update-nodejs, r=Mark-Simulacrum
CI: add script for installing NodeJS and update it to v20

I centralized the installation on a single place to make it simple to update the NodeJS version across the board.

Fixes: https://github.com/rust-lang/rust/issues/123965

r? `@Mark-Simulacrum`
2024-04-21 01:06:10 +00:00
bors
453ceafce3 Auto merge of #124208 - jieyouxu:rollup-gbgpu4u, r=jieyouxu
Rollup of 10 pull requests

Successful merges:

 - #123379 (Print note with closure signature on type mismatch)
 - #123967 (static_mut_refs: use raw pointers to remove the remaining FIXME)
 - #123976 (Use fake libc in core test)
 - #123986 (lint-docs: Add redirects for renamed lints.)
 - #124053 (coverage: Branch coverage tests for lazy boolean operators)
 - #124071 (Add llvm-bitcode-linker to build manifest)
 - #124103 (Improve std::fs::Metadata Debug representation)
 - #124132 (llvm RustWrapper: explain OpBundlesIndirect argument type)
 - #124191 (Give a name to each distinct manipulation of pretty-printer FixupContext)
 - #124196 (mir-opt tests: rename unit-test -> test-mir-pass)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-04-20 22:35:56 +00:00
许杰友 Jieyou Xu (Joe)
c72cfdd46f
Rollup merge of #124196 - RalfJung:mir-opt-tests, r=Mark-Simulacrum
mir-opt tests: rename unit-test -> test-mir-pass

"unit-test" is extremely non-descriptive, no idea how one is supposed to read that and know that this specifies the MIR pass being tested.
2024-04-20 21:45:38 +01:00
许杰友 Jieyou Xu (Joe)
29ee276368
Rollup merge of #124071 - kjetilkjeka:llvm_bitcode_linker_build_manifest, r=Mark-Simulacrum
Add llvm-bitcode-linker to build manifest

When creating #123423 I didn't realize I also had to add the new component to the build-manifest. This PR finishes the work of adding it, by also adding it to the build manifest.

r? ``@Mark-Simulacrum``
2024-04-20 21:45:36 +01:00
许杰友 Jieyou Xu (Joe)
871c3e3075
Rollup merge of #123986 - ehuss:lint-renamed, r=Mark-Simulacrum
lint-docs: Add redirects for renamed lints.

This updates the lint docs to include a redirect for renamed lints to the new name. This helps ensure that links to the old name will still be valid.

Note that this currently uses a hard-coded list. As mentioned in the comment, a future enhancement may gather this information in a better way.

Unblocks #123680
2024-04-20 21:45:35 +01:00
bors
dbce3b43b6 Auto merge of #122013 - Swatinem:unicode-gen-fastpath, r=scottmcm
Add a lower bound check to `unicode-table-generator` output

This adds a dedicated check for the lower bound
(if it is outside of ASCII range) to the output of the `unicode-table-generator` tool.

This generalized the ASCII-only fast-path, but only for the `Grapheme_Extend` property for now, as that is the only one with a lower bound outside of ASCII.
2024-04-20 20:33:25 +00:00
bors
54692c3d0b Auto merge of #124202 - lnicola:sync-from-ra, r=lnicola
Subtree update of `rust-analyzer`

r? `@ghost`
2024-04-20 17:01:20 +00:00
Laurențiu Nicola
b0a18daa75 Merge commit '55d9a533b3' into sync-from-ra 2024-04-20 19:17:08 +03:00
bors
8cf135e191 Auto merge of #121712 - mati865:provide-prebuilt-std-for-gnullvm, r=Mark-Simulacrum
Provide prebuilt std for gnullvm targets

Revival of https://github.com/rust-lang/rust/pull/114346 which waiting on MCP that was accepted recently: https://github.com/rust-lang/compiler-team/issues/710#issuecomment-1942014308
2024-04-20 14:58:25 +00:00
Ralf Jung
75d0fdd967 mir-opt tests: rename unit-test -> test-mir-pass 2024-04-20 13:19:34 +02:00
Ralf Jung
61a7d3d523 ensure the ICE-to-file logic does not affect our test 2024-04-20 11:42:10 +02:00
Matthias Krüger
f58ef084c9
Rollup merge of #124137 - tgross35:testsuite-multi-rev-regex, r=jieyouxu
Match hyphen in multi-revision comment matchers

Currently, the matcher `//[rev-foo,rev-bar]~` does not get selected by the regex. Change the matcher to include `-`.
2024-04-20 11:10:32 +02:00
Matthias Krüger
efb264fa78
Rollup merge of #123409 - ZhuUx:master, r=oli-obk
Implement Modified Condition/Decision  Coverage

This is an implementation based on llvm backend support (>= 18) by `@evodius96` and branch coverage support by `@Zalathar.`

### Major changes:

* Add -Zcoverage-options=mcdc as switch. Now coverage options accept either `no-branch`, `branch`, or `mcdc`. `mcdc` also enables `branch` because it is essential to work.
* Add coverage mapping for MCDCBranch and MCDCDecision. Note that MCDCParameter evolves from  llvm 18 to llvm 19. The mapping in rust side mainly references to 19 and is casted to 18 types in llvm wrapper.
* Add wrapper for mcdc instrinc functions from llvm. And inject associated statements to mir.
* Add BcbMappingKind::Decision, I'm not sure is it proper but can't find a better way temporarily.
* Let coverage-dump support parsing MCDCBranch and MCDCDecision from llvm ir.
* Add simple tests to check whether mcdc works.
* Same as clang, currently rustc does not generate instrument for decision with more than 6 condtions or only 1 condition due to considerations of resource.

### Implementation Details

1. To get information about conditions and decisions, `MCDCState` in `BranchInfoBuilder` is used during hir lowering to mir. For expressions with logical op we call `Builder::visit_coverage_branch_operation` to record its sub conditions, generate condition ids for them and save their spans (to construct the span of whole decision). This process mainly references to the implementation in clang and is described in comments over `MCDCState::record_conditions`. Also true marks and false marks introduced by branch coverage are used to detect where the decision evaluation ends: the next id  of the condition == 0.
2. Once the `MCDCState::decision_stack` popped all recorded conditions, we can ensure that the decision is checked over and push it into `decision_spans`. We do not manually insert decision span to avoid complexity from then_else_break in nested if scopes.
3. When constructing CoverageSpans, add condition info to BcbMappingKind::Branch and decision info to BcbMappingKind::Decision. If the branch mapping has non-zero condition id it will be transformed to MCDCBranch mapping and insert `CondBitmapUpdate` statements to its evaluated blocks. While decision bcb mapping will insert `TestVectorBitmapUpdate` in all its end blocks.

### Usage
```bash
 echo "[build]\nprofiler=true" >> config.toml
./x build --stage 1
./x test tests/coverage/mcdc_if.rs
```
to build the compiler and run tests.

```shell
export PATH=path/to/llvm-build:$PATH
rustup toolchain link mcdc build/host/stage1
cargo +mcdc rustc --bin foo -- -Cinstrument-coverage -Zcoverage-options=mcdc
cd target/debug
LLVM_PROFILE_FILE="foo.profraw" ./foo
llvm-profdata merge -sparse foo.profraw -o foo.profdata
llvm-cov show ./foo -instr-profile=foo.profdata --show-mcdc
```
to check "foo" code.

### Problems to solve

For now decision mapping will insert statements to its all end blocks, which may be optimized by inserting a final block of the decision. To do this we must also trace the evaluated value at each end of the decision and join them separately.

This implementation is not heavily tested so there should be some unrevealed issues. We are going to check our rust products in the next.  Please let me know if you had any suggestions or comments.
2024-04-20 11:10:31 +02:00