A for loop in pp_pow is constructed in such a way that it squares the
base again even after it's iterated through all the bits of the
exponent. This could be a problem on any system where floating
overflow causes an exception; I noticed it with the D_FLOAT format on
OpenVMS Alpha, where it was causing Perl to blow up when running
p/op/pow.t. The patch below fixes it by exiting the loop as soon as
we know we can.
If someone strongly objects to having this test inside the loop, I
can ifdef it.
--- pp.c;-0 Fri Jun 7 09:24:27 2002
+++ pp.c Sat Jun 15 15:10:13 2002
@@ -956,6 +956,8 @@
result *= base;
/* Only bother to clear the bit if it is set. */
power &= ~bit;
+ /* Avoid squaring base again if we're done. */
+ if (power == 0) break;
}
}
SP--;
[end of patch]
--
________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]
"... getting out of a sonnet is much more
difficult than getting in."
Brad Leithauser