diff options
author | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-11-14 05:56:09 +0000 |
---|---|---|
committer | kosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-11-14 05:56:09 +0000 |
commit | ed681d3a82591db3f4dd6e77c568f98b7d1d6216 (patch) | |
tree | 2b2c0611939a1a938ae58aa2ecd147cab9e1b6ad /bignum.c | |
parent | 302220a8a53cb09713d2cfb05ac2decfc098030b (diff) | |
download | ruby-ed681d3a82591db3f4dd6e77c568f98b7d1d6216.tar.gz |
* bignum.c (rb_big2ull): fix 32bit platform breakage. we must
not assume sizeof(VALUE) == sizeof(LONG_LONG).
* test/-ext-/num2int/test_num2int.rb (class TestNum2int):
fix false assumption on 32bit platform.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33746 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r-- | bignum.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -1258,10 +1258,10 @@ rb_big2ull(VALUE x) unsigned LONG_LONG num = big2ull(x, "unsigned long long"); if (!RBIGNUM_SIGN(x)) { - VALUE v = (VALUE)(-(SIGNED_VALUE)num); + LONG_LONG v = -num; /* FIXNUM_MIN-1 .. LLONG_MIN mapped into 0xbfffffffffffffff .. LONG_MAX+1 */ - if (v <= LLONG_MAX) + if ((unsigned LONG_LONG)v <= LLONG_MAX) rb_raise(rb_eRangeError, "bignum out of range of unsigned long long"); return v; } |