<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56228>56228</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LLVM-COV] DEFFUNC callsites result wrong coverage statistics under while-statement
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
NJUocean
</td>
</tr>
</table>
<pre>
1| |struct ucharp { unsigned char *v, *l, *h; };
2| 15|#define AREF(var, idx) ((((((((var).v+(idx)) < (var).l) \
3| 15| || (((var).v+(idx)+1) > (var).h))) \
4| 15| && (__builtin_trap (), 0)), \
5| 15| (var).v)[(idx)])
6| |
7| |struct list
8| |{
9| | struct list *next;
10| |};
11| |
12| |struct list *
13| |alloc_list (void)
14| 2|{
15| 2| static struct list l;
16| 2| return &l;
17| 2|}
18| |
19| |int one = 1;
20| |
21| |void
22| |foo (struct ucharp cp, struct ucharp lp, struct list **nextp)
23| 1|{
24| 2| while (1)
25| 2| {
26| 2| struct list *list;
27| 2| while (AREF (lp, 0) && AREF (cp, AREF (lp, 0)))
28| 2| ++lp.v;
29| 2| list = alloc_list ();
30| 2| while (AREF (cp, AREF (lp, 0)))
31| 2| ++lp.v;
32| 2| if (AREF (lp, 0) == one)
33| 2| do
34| 2| ++lp.v;
35| 2| while (AREF (lp, 0) && AREF (cp, AREF (lp, 0)));
36| 2| *nextp = list;
37| 2| nextp = &list->next;
38| 2| if (!*lp.v)
39| 1| break;
40| 2| }
41| 1|}
42| |
43| |extern void exit (int);
44| |
45| |int
46| |main (void)
47| 1|{
48| 1| static unsigned char cp0[] = "\0\0\0\0";
49| 1| struct ucharp cp = { cp0, cp0, cp0 + sizeof (cp0) };
50| 1| static unsigned char lp0[] = "\1\1\0\0";
51| 1| struct ucharp lp = { lp0, lp0, lp0 + sizeof (lp0) };
52| 1| struct list list;
53| 1| struct list *nextp = &list;
54| 1| foo (cp, lp, &nextp);
55| 1| exit (0);
56| 1|}
Line 28 and 31 were not executed in fact.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVkuPozgQ_jXkgjryg-eBQyfpHFY9s9JIM9eWA07iXTcgMOme_fVTxgnYbjLbKy0hMXG9q74qc2iqn0UIFw7SbWgueOpVN5QqHMoz61rY2IRD3YtTzatQb4UBebwEZKtXeV3PAd0A5w6WAO0C9KhVkZtWHMNTQGjFj6Lm4eO3p31AsgvrtLSo3gOSg5Js8R658jUY3MA_wzzyU234RpbjVrydjVPXOMrNbSLUtH-xsMHGypNl5Wxsf7AV3bMVkARureHl5TAIqUT9ojrWGuO5Dh_ddG5dnfEdnY7DeRBbPsc7_TtpSJyizvvpUrGl6NXMkrmiqVXU3CGFoSWvgVDzd2WDACNPlQMRjJd9xOSej9rGzEYdNiZlU75cubJLIyo7H3iq0ghMOygcOyQdFFOidGKTjt-JJ9BxNXS1rrfLl3o2dzMpuxO6m2BRq7CBngnoDrrUUk3QsjxxUzpmYaK5aT02jU6U2-5lq6Ho7kl7b6qCKXZr55jMBcFejknkpeztLCTX9rGjwS-F9tTS4ideX55jI5TtTKULMpN1PYz0amJEZhSNXXujmIx85Lvek5lswYweAdChG9lCu9o-5QvMJgAotAtkbcQSpegz4XzSaYr_g9OULDCL470s0p2OBcDrGKRuR6C8amZi5BPvuhL7nP9fQW0zS3C7AX8slQ82ugS2mV0PCJB4gHPFn5R0CT8muwE0NeC6NSN_EsjdZkP5oePsb1tn9BEr9gyKsKvBJrmjYt53Ry7EwGHu6SkT8ncx4hVGlpfGKLqjLHb2teBEck-vVybqpaEepV4EltHMIU1D3X2XKVukz9B4dy0PgUMYOV_YskPJP2h1p6fRA-9MWjMAa140lMNe_MObo0GhwaZ7IsboM17LBa_x9bvkdYx_67WcvZbG3XnxvJbLXpNl_ebk9Fokpr9hdprr2i2OcOQJXw8x09Oml0FsOpls0dgTvQEW-YzJcluY32f9CkuykNUVjM_wjXc8rBsF2ng5KKgQIPXISrU27KuqoFVOc7ZSQkleQN2en398edj--UPXb_e033__CviAmd8LxXt4legHqcK3rqlPYdlceMdO3MCgByT0AIWKd2biP-ht_sprtRo6WZyVavuAwtEM79f7k1Dn4bAum1f4I-Xltjy0XfMXL6FJ96LvB97DQ5wQkq3OBUJlVdKUpCzPk4QdSBYfq7yKyhzTBD4ryQ5c9oVB30oUBBGCEpIgYCB0fSRlWmFUYhzzKj-wIEIceleuteF1051WXTH6cBhOPRB1efuZyPoR5fymnw3q3HTF1z--NyVn9Wr0txid_QW9-BVH">