public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug gcov-profile/101412] New: [Gcov] an if statement leads to incorrect coverage of  the case statement
@ 2021-07-11  7:33 byone.heng at gmail dot com
  0 siblings, 0 replies; only message in thread
From: byone.heng at gmail dot com @ 2021-07-11  7:33 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 101412
           Summary: [Gcov] an if statement leads to incorrect coverage of
                    the case statement
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: byone.heng at gmail dot com
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

$./gcc -v                                                                       
Using built-in specs.
COLLECT_GCC=./gcc
COLLECT_LTO_WRAPPER=/home/x/project/gcc/build/install/libexec/gcc/x86_64-pc-linux-gnu/11.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/home/x/project/gcc/build/install
--enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.0.0 20210105 (experimental) (GCC)

$cat test.c
——————————————————————————

#include <stdio.h>

static volatile unsigned char true_var = 1;
const unsigned short int false_var = 0;
g ()
{
  return '\n';
}

f ()
{
  char s[] = "abcedfg012345";
  char *sp = s + 12;

  switch (g ())
    {
      if( true_var > 0 )
      {
      case '\n':
        break;
      }
    }

  while (*--sp == '0')
    ;
  sprintf (sp + 1, "X");

  if (s[12] != 'X')
    abort ();
}

main ()
{
  f ();
  exit (0);
}

——————————————————————————


$gcc -O0 --coverage test.c;./a.out;gcov test;cat test.c.gcov

        -:    1:#include <stdio.h>
        -:    2:
        -:    3:static volatile unsigned char true_var = 1;
        -:    4:const unsigned short int false_var = 0;
        1:    5:g ()
        -:    6:{
        1:    7:  return '\n';
        -:    8:}
        -:    9:
        1:   10:f ()
        -:   11:{
        1:   12:  char s[] = "abcedfg012345";
        1:   13:  char *sp = s + 12;
        -:   14:
        1:   15:  switch (g ())
        -:   16:    {
        -:   17:      if( true_var > 0 )
        -:   18:      {
        -:   19:      case '\n':
        1:   20:        break;
        -:   21:      }
        -:   22:    }
        -:   23:
        1:   24:  while (*--sp == '0')
        -:   25:    ;
        1:   26:  sprintf (sp + 1, "X");
        -:   27:
        1:   28:  if (s[12] != 'X')
    #####:   29:    abort ();
        1:   30:}
        -:   31:
        1:   32:main ()
        -:   33:{
        1:   34:  f ();
        1:   35:  exit (0);
        -:   36:}

Line 19 should be executed once.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-07-11  7:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-11  7:33 [Bug gcov-profile/101412] New: [Gcov] an if statement leads to incorrect coverage of the case statement byone.heng at gmail dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).