This project is closed and read-only.
Bug #6796 ยป patch-numeric.c.diff
| numeric.c (working copy) | ||
|---|---|---|
|
VALUE x, y;
|
||
|
{
|
||
|
if (FIXNUM_P(y)) {
|
||
|
#ifdef __HP_cc
|
||
|
#if defined(__HP_cc) || defined(__clang__)
|
||
|
/* avoids an optimization bug of HP aC++/ANSI C B3910B A.06.05 [Jul 25 2005] */
|
||
|
volatile
|
||
|
#endif
|
||
| ... | ... | |
|
y &= ~1;
|
||
|
do {
|
||
|
while (y % 2 == 0) {
|
||
|
long x2 = x * x;
|
||
|
volatile long x2 = x * x;
|
||
|
if (x2/x != x || !POSFIXABLE(x2)) {
|
||
|
VALUE v;
|
||
|
volatile VALUE v;
|
||
|
bignum:
|
||
|
v = rb_big_pow(rb_int2big(x), LONG2NUM(y));
|
||
|
if (z != 1) v = rb_big_mul(rb_int2big(neg ? -z : z), v);
|
||
| ... | ... | |
|
y >>= 1;
|
||
|
}
|
||
|
{
|
||
|
long xz = x * z;
|
||
|
volatile long xz = x * z;
|
||
|
if (!POSFIXABLE(xz) || xz / x != z) {
|
||
|
goto bignum;
|
||
|
}
|
||