On Sun, 20 Nov 2016, Niels Möller wrote:

ni...@lysator.liu.se (Niels Möller) writes:

It seems "trivially" reproducible on ppc64 though, both real metal
versions and fake ones like ppceb-debv8 (and ppcel-debv8).

I'll try to debug (if no one else beats me to it), but not today.

I've logged in to ppceb-debv8, and it's easy to reproduce. No gdb
installed, so I'm attempting printf debugging. And then I noticed that
the test succeeds if adding a few debug printouts...

I next tried adding -Wall to the command line flags, and I see

 gcc -std=gnu99 -m64  -mtune=power7 -O3 -Wall -I../.. -c
 /home/nisse/hack/gmp/mini-gmp/tests/t-signed.c -o t-signed.o
 /home/nisse/hack/gmp/mini-gmp/tests/t-signed.c: In function 'testmain':
 /home/nisse/hack/gmp/mini-gmp/tests/t-signed.c:45:26: warning: assuming
 signed overflow does not occur when assuming that (X - c) > X is always
 false [-Wstrict-overflow]
    if ((si < oi ? -1 : si > oi) != c)
                           ^
 /home/nisse/hack/gmp/mini-gmp/tests/t-signed.c:45:21: warning: assuming
 signed overflow does not occur when assuming that (X + c) >= X is always
 true [-Wstrict-overflow]
    if ((si < oi ? -1 : si > oi) != c)
                    ^

I don't quite understand neither what the testcase is doing, nor what the
warning means, since there's no subtraction in there.

After inlining, there are subtractions. check_si is called at least once with oi = si + c (c is ±1). gcc simplifies the test si > si - 1 to true, and warns that this optimization may break your program if you rely on wrapping. The usefulness of such a warning is debatable, and we tend to drop some of them from gcc when we think nobody will notice.

--
Marc Glisse
_______________________________________________
gmp-devel mailing list
gmp-devel@gmplib.org
https://gmplib.org/mailman/listinfo/gmp-devel

Reply via email to