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

            Bug ID: 90865
           Summary: ubsan causes coverage branch errors
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sshannin at gmail dot com
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at 
gcc dot gnu.org
  Target Milestone: ---

Code compiled with gcov and ubsan produces bad coverage results.  It seems that
ubsan inserts some branches which are visible to gcov as part of its
instrumentation.

In the following snippet below you can observe that gcov has flagged "int res =
5 / argc;" as containing uncovered branches (checking for division by 0?).



************************************************
seth@dev11:~/covsan$ ls
covsan.cpp
seth@dev11:~/covsan$ cat covsan.cpp 
int main(int argc, char **argv) {
    int res = 5 / argc;
    return res;
}
seth@dev11:~/covsan$ /toolchain/14/bin/g++ covsan.cpp -o covsan --coverage
-fsanitize=undefined -static-libubsan
seth@dev11:~/covsan$ ./covsan 
seth@dev11:~/covsan$ /toolchain/14/bin/gcov covsan
File 'covsan.cpp'
Lines executed:100.00% of 3
Creating 'covsan.cpp.gcov'

seth@dev11:~/covsan$ cat covsan.cpp.gcov 
        -:    0:Source:covsan.cpp
        -:    0:Graph:covsan.gcno
        -:    0:Data:covsan.gcda
        -:    0:Runs:1
        1:    1:int main(int argc, char **argv) {
       1*:    2:    int res = 5 / argc;
        1:    3:    return res;
        -:    4:}
seth@dev11:~/covsan$ /toolchain/14/bin/g++ -v
Using built-in specs.
COLLECT_GCC=/toolchain/14/bin/g++
COLLECT_LTO_WRAPPER=/toolchain/14/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc_9_1_0/configure --prefix=/toolchain/14
--enable-languages=c,c++,fortran --enable-lto --disable-plugin
--program-suffix=-9.1.0 --disable-multilib
Thread model: posix
gcc version 9.1.0 (GCC) 
seth@dev11:~/covsan$

Reply via email to