https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85274

            Bug ID: 85274
           Summary: [GCOV] A return statement in if(0) block is wrongly
                    marked as executed when they are nested in for(;1;)
                    statement and prefixed with an struct declaration and
                    followed by a assignment statement in gcov
           Product: gcc
           Version: 8.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: ---

$ cat small.c
struct s {int s1;};
int a = 0;
int main() {
  for (; 1;) {
    struct s g;
    if (0)
      return 2;
    return 0;
    a = 0;
  }
  return 0;
}

$ gcc -w --coverage small.c; ./a.out; gcov-8 small.c; cat smal.c.gcov
File 'small.c'
Lines executed:80.00% of 5
Creating 'small.c.gcov'

        -:    0:Source:small.c
        -:    0:Graph:small.gcno
        -:    0:Data:small.gcda
        -:    0:Runs:1
        -:    0:Programs:1
        -:    1:struct s {int s1;};
        -:    2:int a = 0;
        1:    3:int main() {
        1:    4:  for (; 1;) {
        -:    5:    struct s g;
        -:    6:    if (0)
        1:    7:      return 2;
        1:    8:    return 0;
        -:    9:    a = 0;
        -:   10:  }
    #####:   11:  return 0;
        -:   12:}

******
Line #7 is wrongly marked as executed. 
while removing any of Line #5 or Line #9, the result is correct.

Reply via email to