On Sun, Mar 29, 2020 at 7:21 PM Jeffrey Walton <noloa...@gmail.com> wrote: > > On Sun, Mar 29, 2020 at 5:59 PM Bruno Haible <br...@clisp.org> wrote: > > > > Jeffrey Walton wrote: > > > Let's see what the GCC folks recommend: "GCC and division by 0 under > > > sanitizers", > > > https://gcc.gnu.org/pipermail/gcc-help/2020-March/138746.html. > > > > The way I interpret their answer > > https://gcc.gnu.org/pipermail/gcc-help/2020-March/138747.html > > is: > > 1) You need to distinguish integer division by zero and floating-point > > division by zero. > > 2) For floating-point division by zero GCC warns but should not warn. > > You should enter a bug report about this. > > 3) The undefined-behaviour sanitizer should report integer division by zero > > but not floating-point division by zero ("as it can be a legitimate way > > of obtaining infinities and NaNs"). > > > > In the gnulib code, test-math.c:89, we clearly have a floating-point > > division by zero. > > Yeah, GCC looks partially clean. It is not producing a sanitizer > finding, so I guess no blood, no foul. > > Clang is a problem: https://bugs.llvm.org/show_bug.cgi?id=45352.
Here's a workaround, but I think it looks like fido's ass: $ cat test.c #include <float.h> #include <math.h> #if defined(__clang__) # define CLANG_NO_DIV_BY_ZERO __attribute__((no_sanitize("float-divide-by-zero"))) #else # define CLANG_NO_DIV_BY_ZERO #endif CLANG_NO_DIV_BY_ZERO int main(void) { return INFINITY == 1.0f / 0.0f ? 0 : 1; } $ clang -fsanitize=undefined test.c -o test.exe $ ./test.exe $ clang --version clang version 6.0.0-1ubuntu2 Would you be willing to hide a macro like CLANG_NO_DIV_BY_ZERO in a header somewhere so it can be used in tests like test-math.h? Jeff