Skip to content

Commit

Permalink
Auto merge of #124255 - RenjiSann:renji/mcdc-nested-expressions, r=Za…
Browse files Browse the repository at this point in the history
…lathar

MCDC coverage: support nested decision coverage

#123409 provided the initial MCDC coverage implementation.

As referenced in #124144, it does not currently support "nested" decisions, like the following example :

```rust
fn nested_if_in_condition(a: bool, b: bool, c: bool) {
    if a && if b || c { true } else { false } {
        say("yes");
    } else {
        say("no");
    }
}
```

Note that there is an if-expression (`if b || c ...`) embedded inside a boolean expression in the decision of an outer if-expression.

This PR proposes a workaround for this cases, by introducing a Decision context stack, and by handing several `temporary condition bitmaps` instead of just one.
When instrumenting boolean expressions, if the current node is a leaf condition (i.e. not a `||`/`&&` logical operator nor a `!` not operator), we insert a new decision context, such that if there are more boolean expressions inside the condition, they are handled as separate expressions.

On the codegen LLVM side, we allocate as many `temp_cond_bitmap`s as necessary to handle the maximum encountered decision depth.
  • Loading branch information
bors committed Apr 29, 2024
2 parents e6af619 + b573a16 commit f3f82a7
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit f3f82a7

Please sign in to comment.