public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug gcov-profile/114715] New: Gcov allocates branches to wrong row for nested switches
@ 2024-04-15  6:38 a_aili at hotmail dot com
  2024-04-15  8:51 ` [Bug gcov-profile/114715] " rguenth at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: a_aili at hotmail dot com @ 2024-04-15  6:38 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 114715
           Summary: Gcov allocates branches to wrong row for nested
                    switches
           Product: gcc
           Version: 11.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: a_aili at hotmail dot com
  Target Milestone: ---

While using the following GCC version 
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-11
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib
--enable-libphobos-checking=release --with-target-system-zlib=auto
--enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet
--with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32
--enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

gcov allocates branches to the wrong row when using nested switches.
Given the following test program:

#include <stdio.h>

int main()
{
    int a = 1;
    int b = 2;
    int c = -3;
    switch(a)
      {
      case 1:
        c = 3;
        switch(b) {
        case 1:
          c = 4;
          break;
        case 2:
          c = 5;
          break;
        }
        break;
      case 2:
        c = 6;
        break;
      default:
        break;
      }

    printf("%i, %i, %i\n", a, b, c);
}

compiled with 'gcc test.c -o0 --coverage -o test'.
Gcov invoked with 'gcov --branch-count --branch-probabilities test.c' gives


        -:    0:Source:test.c
        -:    0:Graph:test.gcno
        -:    0:Data:test.gcda
        -:    0:Runs:1
        -:    1:#include <stdio.h>
        -:    2:
function main called 1 returned 100% blocks executed 70%
        1:    3:int main()
        -:    4:{
        1:    5:    int a = 1;
        1:    6:    int b = 2;
        1:    7:    int c = -3;
        1:    8:    switch(a)
branch  0 taken 1
branch  1 taken 0
branch  2 taken 0
        -:    9:      {
        1:   10:      case 1:
        1:   11:        c = 3;
branch  0 taken 0
branch  1 taken 1
branch  2 taken 0
        -:   12:        switch(b) {
    #####:   13:        case 1:
    #####:   14:          c = 4;
    #####:   15:          break;
        1:   16:        case 2:
        1:   17:          c = 5;
        1:   18:          break;
        -:   19:        }
        1:   20:        break;
    #####:   21:      case 2:
    #####:   22:        c = 6;
    #####:   23:        break;
    #####:   24:      default:
    #####:   25:        break;
        -:   26:      }
        -:   27:
        1:   28:    printf("%i, %i, %i\n", a, b, c);
call    0 returned 1
        -:   29:}

As you can see the branches for the nested switch is allocated to row 11 and
row 12 is marked as not executed. If gcov should have been consistent on how it
allocates coverage the branches on row 11 should have been allocated correctly
to the switch as on row 8. The second switch on row 12 should also be marked as
executed.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-05-16  9:56 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-15  6:38 [Bug gcov-profile/114715] New: Gcov allocates branches to wrong row for nested switches a_aili at hotmail dot com
2024-04-15  8:51 ` [Bug gcov-profile/114715] " rguenth at gcc dot gnu.org
2024-04-15  8:53 ` rguenth at gcc dot gnu.org
2024-04-15  9:05 ` rguenth at gcc dot gnu.org
2024-04-15  9:11 ` rguenth at gcc dot gnu.org
2024-04-15 11:45 ` rguenth at gcc dot gnu.org
2024-05-03 13:55 ` cvs-commit at gcc dot gnu.org
2024-05-03 14:00 ` rguenth at gcc dot gnu.org
2024-05-16  9:56 ` cvs-commit at gcc dot gnu.org

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).