Re: test-math.c:89:3: runtime error: division by zero

2020-03-29 Thread Paul Eggert

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

2020-03-29 Thread Jeffrey Walton
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

2020-03-29 Thread Jeffrey Walton
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

2020-03-29 Thread Bruno Haible
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

2020-03-29 Thread Jeffrey Walton
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

2020-03-29 Thread Bruno Haible
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