https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90092
Bug ID: 90092 Summary: [GCOV] Wrong frequencies then the default label in switch statement is followed with no statement Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: gcov-profile Assignee: unassigned at gcc dot gnu.org Reporter: yangyibiao at nju dot edu.cn CC: marxin at gcc dot gnu.org Target Milestone: --- $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/9.0.1/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-trunk/configure --enable-languages=c,c++ --disable-multilib --prefix=/usr/local/gcc-trunk Thread model: posix gcc version 9.0.1 20190414 (experimental) (GCC) $ cat small.c int bar (int a) { int ret = 0; switch (a) { case 1: ret = ret + 1; break; default: ;// ret = ret + 2; } return ret; } int main () { bar(1); return 0; } $ gcc -w -O0 --coverage small.c; ./a.out; gcov small.c; cat small.c.gcov File 'small.c' Lines executed:100.00% of 9 Creating 'small.c.gcov' -: 0:Source:small.c -: 0:Graph:small.gcno -: 0:Data:small.gcda -: 0:Runs:1 1: 1:int bar (int a) -: 2:{ 1: 3: int ret = 0; 1: 4: switch (a) -: 5: { 1: 6: case 1: ret = ret + 1; break; 1: 7: default: -: 8: ;// ret = ret + 2; -: 9: } -: 10: 1: 11: return ret; -: 12:} -: 13: 1: 14:int main () -: 15:{ 1: 16: bar(1); 1: 17: return 0; -: 18:} Line #7 is wrongly marked as executed. It should be not executed. I am not quite sure this should be reported as a new bug report. As there has similar bug report 85179 while a label statement is followed with no statements. When the "default:" statement is not empty, the result is correct as: $ gcc -w -O0 --coverage small.c; ./a.out; gcov small.c; cat small.c.gcov File 'small.c' Lines executed:80.00% of 10 Creating 'small.c.gcov' -: 0:Source:small.c -: 0:Graph:small.gcno -: 0:Data:small.gcda -: 0:Runs:1 1: 1:int bar (int a) -: 2:{ 1: 3: int ret = 0; 1: 4: switch (a) -: 5: { 1: 6: case 1: ret = ret + 1; break; #####: 7: default: #####: 8: ret = ret + 2; -: 9: } -: 10: 1: 11: return ret; -: 12:} -: 13: 1: 14:int main () -: 15:{ 1: 16: bar(1); 1: 17: return 0; -: 18:}