Likely GMP bug

Niels Möller nisse at lysator.liu.se
Fri May 25 12:10:54 UTC 2018


Dennis Clarke <dclarke at blastwave.org> writes:

> gcd_1.c:187:13: runtime error: shift exponent 32 is too large for
> 32-bit type 'long unsigned int'
> FAIL t-cmp_ui (exit status: 1)

And code is essentially 

      count_trailing_zeros (c, t);
      ulimb >>= (c + 1);

The intention is to shift right to get rid of both trailing zero bits,
and the redundant least significant one bit.

That fails with undefined behavior if by chance t == 2^31, so that c ==
31.

I don't see how that can happen, though, since ulimb, vlimb < 2^31
through out the loop, and t = (ulimb - vlimb) mod 2^32.

And I also wonder why USE_ZEROTAB is set to 0 here.

Regards,
/Niels

-- 
Niels Möller. PGP-encrypted email is preferred. Keyid 368C6677.
Internet email is subject to wholesale government surveillance.


More information about the gmp-bugs mailing list