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 = ≈ _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.