Fix lgamma_r/lgammaf_r/lgammal_r for -0.

Upstream has implemented lgammal/lgammal_r for ld128, and fixed the
sign problem we reported with all the lgamma*_r functions and -0.

Bug: 17471883
Change-Id: Ibb175d9cab67efae75f1010796fd44c9ba6ce4fc
diff --git a/tests/math_test.cpp b/tests/math_test.cpp
index b4604f8..538ebb1 100644
--- a/tests/math_test.cpp
+++ b/tests/math_test.cpp
@@ -1188,12 +1188,51 @@
   ASSERT_EQ(1, sign);
 }
 
+TEST(math, lgamma_r_17471883) {
+  int sign;
+
+  sign = 0;
+  ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(0.0, &sign));
+  ASSERT_EQ(1, sign);
+  sign = 0;
+  ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(-0.0, &sign));
+  ASSERT_EQ(-1, sign);
+}
+
 TEST(math, lgammaf_r) {
   int sign;
   ASSERT_FLOAT_EQ(logf(24.0f), lgammaf_r(5.0f, &sign));
   ASSERT_EQ(1, sign);
 }
 
+TEST(math, lgammaf_r_17471883) {
+  int sign;
+
+  sign = 0;
+  ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(0.0f, &sign));
+  ASSERT_EQ(1, sign);
+  sign = 0;
+  ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(-0.0f, &sign));
+  ASSERT_EQ(-1, sign);
+}
+
+TEST(math, lgammal_r) {
+  int sign;
+  ASSERT_DOUBLE_EQ(log(24.0L), lgamma_r(5.0L, &sign));
+  ASSERT_EQ(1, sign);
+}
+
+TEST(math, lgammal_r_17471883) {
+  int sign;
+
+  sign = 0;
+  ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(0.0L, &sign));
+  ASSERT_EQ(1, sign);
+  sign = 0;
+  ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(-0.0L, &sign));
+  ASSERT_EQ(-1, sign);
+}
+
 TEST(math, tgamma) {
   ASSERT_DOUBLE_EQ(24.0, tgamma(5.0));
 }