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

Reply via email to