https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115156
Bug ID: 115156 Summary: [14 Regression] passing zero to __builtin_clzl() check missing Product: gcc Version: 14.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: bic60176 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 Target Milestone: --- OS: Ubuntu 22.04.3 LTS UBSAN missed checking if zero is passed to __builtin_clzl() when compiling with gcc-14.1.0. testcase: ``` #include<stdint.h> void main() { int32_t b = 0; (__builtin_clzl(b), 3) && b; // __builtin_clzl(b); /* gcc-14 can detect this one */ } ``` $ ../compiler-builds/gcc-14.1.0_build/bin/gcc -fsanitize=undefined -g -lgcc_s testcase.c -o exec $ ./exec 2>exec.err $ cat exec.err $ ../compiler-builds/gcc-13.2.0_build/bin/gcc -fsanitize=undefined -g -lgcc_s testcase.c -o exec $ ./exec 2>exec.err $ cat exec.err testcase.c:5:4: runtime error: passing zero to clz(), which is not a valid argument