https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106090
--- Comment #2 from Yang Wang <njuwy at smail dot nju.edu.cn> --- (In reply to Martin Liška from comment #1) > No, it's correct as it only contains do_it() call that is triggered the same > number times as line 20 minus one. (In reply to Martin Liška from comment #1) > No, it's correct as it only contains do_it() call that is triggered the same > number times as line 20 minus one. -: 0:Source:test.c -: 0:Graph:test.gcno -: 0:Data:test.gcda -: 0:Runs:1 -: 1:volatile int cnt = 0; -: 2: -: 3:__attribute__((noinline, noclone)) static int 5: 4:last (void) -: 5:{ 5: 6: return ++cnt % 5 == 0; -: 7:} -: 8: -: 9:__attribute__((noinline, noclone)) static void 6: 10:do_it (void) -: 11:{ 6: 12: asm volatile ("" : : "r" (&cnt) : "memory"); 6: 13:} -: 14: 1: 15:static void f1 (void) -: 16:{ 1: 17: do_it(); 4: 18: for (; 0<1; do_it()) -: 19: { 5: 20: if (last ()) 1: 21: break; -: 22: } 1: 23: do_it (); 1: 24:} -: 25: -: 26:int 1: 27:main () -: 28:{ 1: 29: f1 (); -: 30:} do_it() is indeed called 4 times,but I wonder how the coverage statistiscs of the for-statement is calculated. It doesn't become 5 untill the for-stamentment is completed. -: 0:Source:test.c -: 0:Graph:test.gcno -: 0:Data:test.gcda -: 0:Runs:1 -: 1:volatile int cnt = 0; -: 2: -: 3:__attribute__((noinline, noclone)) static int 5: 4:last (void) -: 5:{ 5: 6: return ++cnt % 5 == 0; -: 7:} -: 8: -: 9:__attribute__((noinline, noclone)) static void 6: 10:do_it (void) -: 11:{ 6: 12: asm volatile ("" : : "r" (&cnt) : "memory"); 6: 13:} -: 14: 1: 15:static void f1 (void) -: 16:{ 1: 17: do_it(); 5: 18: for (int a=0;0<1;do_it()) -: 19: { 5: 20: if (last ()) 1: 21: break; -: 22: } 1: 23: do_it (); 1: 24:} -: 25: -: 26:int 1: 27:main () -: 28:{ 1: 29: f1 (); -: 30:}