PATCH: Bad signed int to long long conversion

Vincent Lefevre vincent at vinc17.net
Thu Feb 9 17:47:32 CET 2012


On 2012-02-09 17:01:45 +0100, Torbjorn Granlund wrote:
> Strictly speaking, I don't think things like (unsigned long)(MIN_LONG)
> is well-defined C.

It is well-defined:

      6.3.1.3 Signed and unsigned integers

  1   When a value with integer type is converted to another integer
      type other than _Bool, if the value can be represented by the
      new type, it is unchanged.
  2   Otherwise, if the new type is unsigned, the value is converted
      by repeatedly adding or subtracting one more than the maximum
      value that can be represented in the new type until the value
      is in the range of the new type.60)

  60) The rules describe arithmetic on the mathematical value, not
      the value of a given type of expression.

6.3.1.3#2 describes the usual modular arithmetic rule.

-- 
Vincent Lefèvre <vincent at vinc17.net> - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


More information about the gmp-bugs mailing list