<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/82356>82356</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llvm-cov: wrong line coverage of 0 for closing brace after statement after return.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ManuelvOK
</td>
</tr>
</table>
<pre>
Having an empty statement after a return statement leads to the line count of a following closing brace being 0:
(I am building all these examples with `-fprofile-instr-generate -fcoverage-mapping`, run them once and create reports with `llvm-cov show`)
```
1| 1|int main() {
2| 1| return 0;;
3| 0|}
```
The second semicolon in line 2 as well as the closing brace in line 3 have a red background.
Omitting the empty statement leads to line 3 having an execution count of 1:
```
1| 1|int main() {
2| 1| return 0;
3| 1|}
```
Putting the second semicolon on a dedicated line has the noncovered brace again:
```
1| 1|int main() {
2| 1| return 0;
3| 0| ;
4| 0|}
```
Any statement in line 3 also leads to the brace not being covered:
```
1| 1|int main() {
2| 1| return 0;
3| 0| int x = 0;
4| 0|}
```
A second return statement, though:
```
1| 1|int main() {
2| 1| return 0;
3| 0| return 0;
4| 1|}
```
Here is an example with a condition that is run twice, once executing the body and once jumping over it:
```
1| 2|int foo (int i) {
2| 2| if (i) {
3| 1| return 0;;
4| 0| }
5| 1| return 1;
6| 2|}
7| |
8| 1|int main() {
9| 1| foo(0);
10| 1| foo(1);
11| 1| return 0;
12| 1|}
```
The coverage of closing braces should at least be consistent.
I would expect it to be covered if something inside the enclosed code block is executed.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVs2OozgQfhrnUkpkDCFw4NA_ima0Ws0e9gUMFOAZY0e2SXrefmVDQpNsetKakSLsbpfL9X31y60VrUIsyPaZbF9XfHCdNsXfXA0oj9_-WpW6_ll84UehWuAKsD-4n2Add9ijcsAbhwY4GHSDUe8OJPLagtPgOgQpFEKlB-VAN8Ch0VLqk1dZSW39WhpeIZTo95TET4S-EvpEWPYVeA_lIGQdLJDSK7QI-Mb7g0QLJ-E6ICldNwejGyFxLZR1Zt2iQsMdwrqp9BENb3Hd88NBqJaklLAXMIPyynrQqkLgqobKoL9h8KCNm1VLeezXlT6C7fQpXM4n-8ZvSqdf-BMAICK7F4DzTigHPReKsIywHMjueZZkC0m_TlRSEj_730UyvkhSsnshu9f_ff3fDsFipVUNFntRaakVCDW6gAG3cEIp_eods6T_LBZDx48YvFpDyasfrdGDqjfvQX_rhXP-qldzHRUX58_qzvHzhtXghFZzOESzu-8Q-XscLgmMPuBu_P4zzMBumNQKONRYi4o7rEd83USm0ipEmict8Mlbb_Cv0D0eJr9GdwkPvy6Ok4eiZ_w-qffOnKOCS6uXiT3iVNpNqTvhv4v5T-XFPdRe4xuQ-PVK7FPoz16_rmm-ZrhOD233B336aYj3xJKFto8hfkGDIOyYkKGOjrWOgwcuQn66jjsvE6rkSVTo4YdKOeXwlCK-QYTiGc6-D72vsODjAIR7jCg2EdVoDYRlfis-YCvsRBNEb8TiG1I_qqnJbdKciYPtPfdECxXpwq75OgDsZgv80eX_2SNFLb95vtGasCx0n3cGRPSOYLQQjKKHoi1inwgj32vOvdVX8kU3sb5bDrIGHvqB9SXCh5cV1qFyUzP5CqcghG8HrBwI5ytLiedC4t1sdY-u83qFsqLGseMo_xjWUOkaoZS6-uGDdQxNrDeruojrPM75CotoR7MkTpM8XXVFnmRNnES7PI3yEkua0jLJWZ1mvCwbivFKFIyyhDJGoziJ4nST0SbL8qTZ0iivtxxJQrHnQm78WLDRpl0JawcsMhZv05XkJUobxinGFJ4gHBLG_HRlijBKlENrSUKlsM7OWpxwEovzrEHiJzgZrdrz8DTTTKHR5qp1j3PY9Vw2enizGowsOucO1ucj2xO2b4XrhnJT6Z6wvX9zWtYHo79j5QjbB8MtYfsA7L8AAAD__2iQ0ns">