Re: test-math.c:89:3: runtime error: division by zero
On 3/29/20 4:30 PM, Jeffrey Walton wrote: 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? It'd be better to have the test fail with Clang, since Clang does have a bug here. There should be some way you can tell the CI system "this test is expected to fail on this platform."
Re: test-math.c:89:3: runtime error: division by zero
On Sun, Mar 29, 2020 at 7:21 PM Jeffrey Walton wrote: > > On Sun, Mar 29, 2020 at 5:59 PM Bruno Haible 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 #include #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
Re: test-math.c:89:3: runtime error: division by zero
On Sun, Mar 29, 2020 at 5:59 PM Bruno Haible 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. Jeff
Re: test-math.c:89:3: runtime error: division by zero
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. Bruno
Re: test-math.c:89:3: runtime error: division by zero
On Sun, Mar 29, 2020 at 12:24 PM Bruno Haible wrote: > > Jeffrey Walton wrote: > > This showed up during acosf testing with UBsan: > > > > test-math.c:89:3: runtime error: division by zero > > The code performs a division 1.0 / 0.0. This is a valid operation in > IEEE 854. It must produce a HUGE_VAL. > > Surely you can tell the sanitizer to ignore this? Well, my first reaction is, that sucks. I don't recall a situation where undefined behavior was conforming like that. 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. I tend to do what the GCC devs say. They write the compilers that remove the code with undefined behavior and produce unexpected results. It is wise to keep the compiler happy. Jeff
Re: test-math.c:89:3: runtime error: division by zero
Jeffrey Walton wrote: > This showed up during acosf testing with UBsan: > > test-math.c:89:3: runtime error: division by zero The code performs a division 1.0 / 0.0. This is a valid operation in IEEE 854. It must produce a HUGE_VAL. Surely you can tell the sanitizer to ignore this? Bruno