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

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2019-04-16
     Ever confirmed|0                           |1

--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Confirmed, simplified test-case:

#include <stdarg.h>

long x = 0;

inline void __attribute__((always_inline))
bar (va_list ap)
{
  x = va_arg (ap, double);
}

void foo (int i, ...)
{
  va_list ap;
  va_start (ap, i);
  bar (ap);
  va_end (ap);
}

int main ()
{
  foo (18.0);
  return 0;
}

At coverage pass, we have following GIMPLE:

$2 = void
(gdb) p debug_function(cfun->decl, 0)
foo (int i)
{
  struct  * ap;
  struct  ap[1];
  double _6;
  long int _7;

  <bb 2> :
  __builtin_va_start (&ap, 0);
  ap_5 = &ap;
  _6 = .VA_ARG (ap_5, 0B, 0B);

  <bb 3> :
  _7 = (long int) _6;
  x = _7;

  <bb 4> :
  __builtin_va_end (&ap);
  ap ={v} {CLOBBER};
  return;

}

$ gcov-dump -l pr90104.gcno
...
pr90104.gcno:  01000000:  14:FUNCTION ident=1636255671,
lineno_checksum=0xf71f0366, cfg_checksum=0x7cb34af9, `foo' pr90104.c:11:6-17:1
pr90104.gcno:    01410000:   1:BLOCKS 5 blocks
pr90104.gcno:    01430000:   3:ARCS 1 arcs
pr90104.gcno:                  block 0: 2:0004(fall)
pr90104.gcno:    01430000:   5:ARCS 2 arcs
pr90104.gcno:                  block 2: 3:0004(fall) 1:0003(tree,fake)
pr90104.gcno:    01430000:   3:ARCS 1 arcs
pr90104.gcno:                  block 3: 4:0005(tree,fall)
pr90104.gcno:    01430000:   3:ARCS 1 arcs
pr90104.gcno:                  block 4: 1:0001(tree)
pr90104.gcno:    01450000:  11:LINES
pr90104.gcno:                  block 2:`pr90104.c':11, 14, 8
pr90104.gcno:    01450000:  10:LINES
pr90104.gcno:                  block 3:`pr90104.c':8, 9
pr90104.gcno:    01450000:  10:LINES
pr90104.gcno:                  block 4:`pr90104.c':16, 17

Line 8 is present in bb_2 and bb_3, thus it's incremented twice. It's an
artifact of early inlining.

Reply via email to