On Mon, 5 Oct 2015, Matthew Fernandez wrote: > tl;dr: Is dividing by INT64_MIN in C undefined behaviour?
No, only dividing by 0 or dividing the minimum value of the type by -1 (and the latter should be defined for -fwrapv, see bug 30484). > on x86 is emitted as a call to __divdi3. If the numerator or denominator are > negative, __divdi3 negates them. If either of these values is INT64_MIN, I > believe this negation is undefined. Is this correct? If this is the case, then > it seems code like "INT64_MIN / INT64_MIN" which should be perfectly legal > accidentally causes undefined behaviour via libgcc. In practice, everything > seems to work as expected, but it seems to me that the C code of __divdi3 > should not be relying on these negations working consistently. It sounds like some casts to UDWtype should be inserted so the negation takes place on an unsigned type. -- Joseph S. Myers jos...@codesourcery.com