Add overflow check to tanh(complex) and reduce to finite answer.  Fixes http://llvm.org/bugs/show_bug.cgi?id=13874

llvm-svn: 164266
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: c43826f00309dbafb9f4a106d8e0369c7e8199c7
diff --git a/include/complex b/include/complex
index 54dbc25..6f88152 100644
--- a/include/complex
+++ b/include/complex
@@ -1351,7 +1351,11 @@
     _Tp __2r(_Tp(2) * __x.real());
     _Tp __2i(_Tp(2) * __x.imag());
     _Tp __d(cosh(__2r) + cos(__2i));
-    return  complex<_Tp>(sinh(__2r)/__d, sin(__2i)/__d);
+    _Tp __2rsh(sinh(__2r));
+    if (isinf(__2rsh) && isinf(__d))
+        return complex<_Tp>(__2rsh > _Tp(0) ? _Tp(1) : _Tp(-1),
+                            __2i > _Tp(0) ? _Tp(0) : _Tp(-0.));
+    return  complex<_Tp>(__2rsh/__d, sin(__2i)/__d);
 }
 
 // asin