fix op/infnan.t failures on VC 6
authorDaniel Dragan <bulk88@hotmail.com>
Tue, 7 Oct 2014 05:44:44 +0000 (01:44 -0400)
committerSteve Hay <steve.m.hay@googlemail.com>
Tue, 7 Oct 2014 06:59:40 +0000 (07:59 +0100)
fixes 2 failures, first is a fatal error, sceond is a not ok
-----
ok 460 - abs(NaN) is NaN
ok 461 - int(NaN) is NaN
Can't take sqrt of NaN at op/infnan.t line 319.
C:\perl521\srcvc6\t>
-----
ok 465 - sin(NaN) is NaN
not ok 466 - rand(NaN) is NaN
# Failed test 466 - rand(NaN) is NaN at op/infnan.t line 331
#      got "0.20653527722801"
# expected "NaN"
ok 467 - sin(9**9**9) is NaN
-----

pp.c

diff --git a/pp.c b/pp.c
index 58169cb..c14eb3a 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -2717,7 +2717,11 @@ PP(pp_sin)
       const NV value = SvNV_nomg(arg);
       NV result = NV_NAN;
       if (neg_report) { /* log or sqrt */
-         if (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0)) {
+         if (
+#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
+             ! Perl_isnan(value) &&
+#endif
+             (op_type == OP_LOG ? (value <= 0.0) : (value < 0.0))) {
              SET_NUMERIC_STANDARD();
              /* diag_listed_as: Can't take log of %g */
              DIE(aTHX_ "Can't take %s of %"NVgf, neg_report, value);
@@ -2768,7 +2772,11 @@ PP(pp_rand)
                value = SvNV(sv);
        }
     /* 1 of 2 things can be carried through SvNV, SP or TARG, SP was carried */
+#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
+       if (! Perl_isnan(value) && value == 0.0)
+#else
        if (value == 0.0)
+#endif
            value = 1.0;
        {
            dTARGET;