summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
authorkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-11-14 05:56:09 +0000
committerkosaki <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-11-14 05:56:09 +0000
commited681d3a82591db3f4dd6e77c568f98b7d1d6216 (patch)
tree2b2c0611939a1a938ae58aa2ecd147cab9e1b6ad /bignum.c
parent302220a8a53cb09713d2cfb05ac2decfc098030b (diff)
* 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.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/bignum.c b/bignum.c
index 91c275e605..7f47cf6efb 100644
--- a/bignum.c
+++ b/bignum.c
@@ -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;
}