Issue #15477: Add workaround for log1p(-0.0) on platforms where it's broken.
diff --git a/Modules/_math.c b/Modules/_math.c
index 2fef481..fe75a36 100644
--- a/Modules/_math.c
+++ b/Modules/_math.c
@@ -189,6 +189,27 @@
    significant loss of precision that arises from direct evaluation when x is
    small. */
 
+#ifdef HAVE_LOG1P
+
+double
+_Py_log1p(double x)
+{
+    /* Some platforms supply a log1p function but don't respect the sign of
+       zero:  log1p(-0.0) gives 0.0 instead of the correct result of -0.0.
+
+       To save fiddling with configure tests and platform checks, we handle the
+       special case of zero input directly on all platforms.
+    */
+    if (x == 0.0) {
+        return x;
+    }
+    else {
+        return log1p(x);
+    }
+}
+
+#else
+
 double
 _Py_log1p(double x)
 {
@@ -230,3 +251,5 @@
         return log(1.+x);
     }
 }
+
+#endif /* ifdef HAVE_LOG1P */