# HG changeset patch
# User t_mrc-ct@users.osdn.jp
# Date 1458856600 -32400
#      Fri Mar 25 06:56:40 2016 +0900
# Branch THUNDERBIRD3880_2016050308_RELBRANCH
# Node ID 6dc591a31e0d7ba51b65c8e0b753e4dec8e3d85d
# Parent  b3387c468cf14072b9db692dfaab72027b7b61f6
Math.log1p(-0) returns 0 instead of -0. (gcc4.6 bug?)

diff --git a/js/src/jsmath.cpp b/js/src/jsmath.cpp
--- a/js/src/jsmath.cpp
+++ b/js/src/jsmath.cpp
@@ -1070,17 +1070,20 @@
         /* For other large enough values of x use direct computation */
         return log(1.0 + x);
     }
 }
 #endif
 
 #ifdef __APPLE__
 // Ensure that log1p(-0) is -0.
-#define LOG1P_IF_OUT_OF_RANGE(x) if (x == 0) return x;
+//#define LOG1P_IF_OUT_OF_RANGE(x) if (x == 0) return x; // 0
+//#define LOG1P_IF_OUT_OF_RANGE(x) if (x == 0) return std::signbit(x) ? -0.0L : 0.0L; // -0
+//#define LOG1P_IF_OUT_OF_RANGE(x) if (IsNegativeZero(x)) return x; // -0
+#define LOG1P_IF_OUT_OF_RANGE(x) if (IsNegativeZero(x)) return -0.0L;
 #else
 #define LOG1P_IF_OUT_OF_RANGE(x)
 #endif
 
 double
 js::math_log1p_impl(MathCache* cache, double x)
 {
     LOG1P_IF_OUT_OF_RANGE(x);
