<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/54639>54639</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LLVM-COV] Wrong coverage for a switch statement with embedded if-statement
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          NJUocean
      </td>
    </tr>
</table>

<pre>
    $ clang -v
clang version 11.0.0
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/wangyang/llvm-project/build/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Candidate multilib: .;@m64
Selected multilib: .;@m64

$ cat test.c
```
/* PR c++/88984 */
/* { dg-do run } */

void foo(int x, int y) {
  while (x > 0)
    switch (({
      if (y)
        break;
      y;
    })) {
    case 2:
      x = 0;
    }
}

int main() {
  foo(1, 1);
  return 0;
}
```


$ clang -w -O0 -g -fcoverage-mapping -fprofile-instr-generate=test.profraw test.c; ./a.out; llvm-profdata merge test.profraw -o test.profdata; llvm-cov show a.out -instr-profile=test.profdata test.c > test.lcov; cat test.lcov
```
    1|       |/* PR c++/88984 */
    2|       |/* { dg-do run } */
    3|       |
    4|      1|void foo(int x, int y) {
    5|      1|  while (x > 0)
    6|      1|    switch (({
    7|      1|      if (y)
    8|      1|        break;
    9|      0|      y;
   10|      0|    })) {
   11|      0|    case 2:
   12|      0|      x = 0;
   13|      0|    }
   14|      1|}
   15|       |
   16|      1|int main() {
   17|      1|  foo(1, 1);
   18|      1|  return 0;
   19|      1|}
```
Line 6 should not  be executed as the loop breaks in line 8 directly.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1Vt-zojYU_mvw5QwMBER88OGqtdPObbfTbbePnQAB0g2JQ8JV__ueAKIoe3cfdh2MSc453_lyfgRTlV82DokgE1SW4L45_t7xX_rVG2s0VxKCwPM9v5f8RZuSGSd8gXMS_xtHbis_S3WSruCyPbulbAe9qmE0h1rlTFjto9L83It-kdpQIVi-540VOeRQqZrhzwm9XvCLUyHeavfYqP9YZnCZtlzk9pfLHuSgWplDRmXOc2oY_LzbAe-BqUHSA3CrGwvGUxzLLMNxoH2jSw6rHwDpLa8R-56wSQ_5kQkMC8u_F8XdSK5uheHWEIE8J9w6kV_H0YPX95SG0VYUNWCYNl427MX-8AwqB4e8wB9_AvLbds8hSdZJhAfohPdazmoLeenmCppW4mo_VerGN8VzKJRySMKlgbNDbGwMXByytgC9FsCp4oKhfXIGJ_wJfBRfRQD6xE1WWal9bkb2wwu7f5no20-Klf7ZhuFu9zJZI2FrNeUBGCHNgGAU7y0tqz2yerTvTzpOutEer6bYEpbuBLyPQ2BjEFjXN7SGmbaRdw5umA8Jesxnf0OcwP3gg4uzIlN4Q9CSuTU9HrkVFtixBYbXtUXZuCWTqGAYnqirBCtt6OlaFuEWy4ccqKdaYxfXni-wFCnUDG8amNi56ra2OqMRMgFdqRN0WDC4H8jce--Qe_dd9rupQHMLNVZstzEXE5uMwFnthszj7NvK2CqTObv3C9vqhlOzcT8a9y2hby1-gOXE7ivtED8ov9cgqyfd-ZZJZvTmmmg9Sv1xNmmrwH_SmG-0IHhSfG69gMz4m2nGIJz1OoqneZmIlvOpDKZR_nJTQ_AY4y-3OQSPcX5qfCtZz7N9KPtXLhnEtsNakYNUBvPFgJ1Z1tr3AdVgKgZCqWOfR421B8IaJZDzBt8a4uL1UIt8E-brcE0XhhvBNs5y-_r66Td39-GTs9zDP43Ce-R6seD5GqDXmsPXnGE1w_DgugJWpyzP0T0v3FG0aBuxqYw5aptb22OHEpXb1MtUPfyteP53wbVumcbJMorD9aLakDSgQUKLdBnSEL2E2ZIlEctjFhQFZWQhaMqEtuwdQiQ7QQeBczzEgm-IT4gfhr6fLFeh763iiJGYUpqFNPUjii9MhikWnuXhqaZcNJuOUtqWGoWCa6NvQqo1LyXrgmXxaWsq1Wx-__VvlTEqF53vTcf9fxf2qFo">