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$