aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bignum.c4
-rw-r--r--test/ruby/test_numeric.rb5
2 files changed, 8 insertions, 1 deletions
diff --git a/bignum.c b/bignum.c
index 148276743f..7ffb798e5e 100644
--- a/bignum.c
+++ b/bignum.c
@@ -7016,7 +7016,9 @@ int_pow_tmp2(VALUE x, VALUE y, long mm, int nega_flg)
xx = MUL_MODULO(xx, xx, m);
}
-#ifndef DLONG
+#ifdef DLONG
+ tmp = tmp2;
+#else
tmp = FIX2LONG(tmp2);
#endif
if (nega_flg && tmp) {
diff --git a/test/ruby/test_numeric.rb b/test/ruby/test_numeric.rb
index 02a6b8f4a8..6efc40320a 100644
--- a/test/ruby/test_numeric.rb
+++ b/test/ruby/test_numeric.rb
@@ -400,6 +400,11 @@ class TestNumeric < Test::Unit::TestCase
2120078484650058507891187874713297895455.
pow(5478118174010360425845660566650432540723,
5263488859030795548286226023720904036518))
+
+ assert_equal(12, 12.pow(1, 10000000000), '[Bug #14259]')
+ assert_equal(12, 12.pow(1, 10000000001), '[Bug #14259]')
+ assert_equal(12, 12.pow(1, 10000000002), '[Bug #14259]')
+ assert_equal(17298641040, 12.pow(72387894339363242, 243682743764), '[Bug #14259]')
end
end