<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">