Opened 4 years ago

Last modified 4 years ago

#13558 new Bugs

gcd(INT_MIN, INT_MIN) crashes

Reported by: Evan Driscoll <evaned@…> Owned by: Daryle Walker
Milestone: To Be Determined Component: integer
Version: Boost 1.67.0 Severity: Problem
Keywords: Cc: evaned@…

Description

The following produces a SIGFPE for me:

#include <iostream>
#include <climits>
#include <boost/integer/common_factor_rt.hpp>

int main()
{
    std::cout << boost::integer::gcd(INT_MIN, INT_MIN);
}

because it simplifies gcd(INT_MIN, INT_MIN) => gcd(INT_MIN % INT_MIN, INT_MIN) => gcd(0, INT_MIN) => gcd(0, INT_MIN % 0) => gcd(0, SIGFPE)`.

I'm actually not sure what the right behavior is (the documented behavior is that the return is always positive, and, for example, gcd(-2, -2) returns 2, but obviously you can't do that here).

Boost 1.63 returned INT_MIN in this case, which seems like the best answer.

Responsible commit: https://github.com/boostorg/integer/commit/beb68718640150f67fe5671bbbb7848d9e7170b8

Change History (1)

comment:1 by Evan Driscoll <evaned@…>, 4 years ago

Cc: evaned@… added
Component: Noneinteger
Owner: set to Daryle Walker
Note: See TracTickets for help on using tickets.