https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106090
--- Comment #3 from Yang Wang <njuwy at smail dot nju.edu.cn> --- (In reply to Yang Wang from comment #2) > (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:} Besides, GCov doesn't seem to provide voerage statistics for "for(;;)" . -: 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(); -: 18: for (; ; ) -: 19: { 5: 20: if (last ()) 1: 21: break; 4: 22: do_it(); -: 23: } 1: 24: do_it (); 1: 25:} -: 26: -: 27:int 1: 28:main () -: 29:{ 1: 30: f1 (); -: 31:}