bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
* test-math.c:89:3: runtime error: division by zero
@ 2020-03-29 13:32 Jeffrey Walton
  2020-03-29 16:24 ` Bruno Haible
  0 siblings, 1 reply; 7+ messages in thread
From: Jeffrey Walton @ 2020-03-29 13:32 UTC (permalink / raw)
  To: bug-gnulib

This showed up during acosf testing with UBsan:

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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: test-math.c:89:3: runtime error: division by zero
  2020-03-29 13:32 test-math.c:89:3: runtime error: division by zero Jeffrey Walton
@ 2020-03-29 16:24 ` Bruno Haible
  2020-03-29 21:09   ` Jeffrey Walton
  0 siblings, 1 reply; 7+ messages in thread
From: Bruno Haible @ 2020-03-29 16:24 UTC (permalink / raw)
  To: bug-gnulib, noloader

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



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: test-math.c:89:3: runtime error: division by zero
  2020-03-29 16:24 ` Bruno Haible
@ 2020-03-29 21:09   ` Jeffrey Walton
  2020-03-29 21:59     ` Bruno Haible
  0 siblings, 1 reply; 7+ messages in thread
From: Jeffrey Walton @ 2020-03-29 21:09 UTC (permalink / raw)
  To: Bruno Haible; +Cc: bug-gnulib

On Sun, Mar 29, 2020 at 12:24 PM Bruno Haible <bruno@clisp.org> 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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: test-math.c:89:3: runtime error: division by zero
  2020-03-29 21:09   ` Jeffrey Walton
@ 2020-03-29 21:59     ` Bruno Haible
  2020-03-29 23:21       ` Jeffrey Walton
  0 siblings, 1 reply; 7+ messages in thread
From: Bruno Haible @ 2020-03-29 21:59 UTC (permalink / raw)
  To: noloader; +Cc: bug-gnulib

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



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: test-math.c:89:3: runtime error: division by zero
  2020-03-29 21:59     ` Bruno Haible
@ 2020-03-29 23:21       ` Jeffrey Walton
  2020-03-29 23:30         ` Jeffrey Walton
  0 siblings, 1 reply; 7+ messages in thread
From: Jeffrey Walton @ 2020-03-29 23:21 UTC (permalink / raw)
  To: Bruno Haible; +Cc: bug-gnulib

On Sun, Mar 29, 2020 at 5:59 PM Bruno Haible <bruno@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.

Jeff


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: test-math.c:89:3: runtime error: division by zero
  2020-03-29 23:21       ` Jeffrey Walton
@ 2020-03-29 23:30         ` Jeffrey Walton
  2020-03-29 23:35           ` Paul Eggert
  0 siblings, 1 reply; 7+ messages in thread
From: Jeffrey Walton @ 2020-03-29 23:30 UTC (permalink / raw)
  To: Bruno Haible; +Cc: bug-gnulib

On Sun, Mar 29, 2020 at 7:21 PM Jeffrey Walton <noloader@gmail.com> wrote:
>
> On Sun, Mar 29, 2020 at 5:59 PM Bruno Haible <bruno@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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: test-math.c:89:3: runtime error: division by zero
  2020-03-29 23:30         ` Jeffrey Walton
@ 2020-03-29 23:35           ` Paul Eggert
  0 siblings, 0 replies; 7+ messages in thread
From: Paul Eggert @ 2020-03-29 23:35 UTC (permalink / raw)
  To: noloader, Bruno Haible; +Cc: bug-gnulib

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."


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-03-29 23:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-29 13:32 test-math.c:89:3: runtime error: division by zero Jeffrey Walton
2020-03-29 16:24 ` Bruno Haible
2020-03-29 21:09   ` Jeffrey Walton
2020-03-29 21:59     ` Bruno Haible
2020-03-29 23:21       ` Jeffrey Walton
2020-03-29 23:30         ` Jeffrey Walton
2020-03-29 23:35           ` Paul Eggert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).