summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog69
-rw-r--r--NEWS2
-rw-r--r--math/bits/math-finite.h198
3 files changed, 206 insertions, 63 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c0c0c25ce..90a4bb131d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,72 @@
+2015-11-05  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #19205]
+	* math/bits/math-finite.h (acosf): Condition declaration on
+	[__USE_ISOC99].
+	(acosl): Likewise.
+	(acoshf): Likewise.
+	(acoshl): Likewise.
+	(asinf): Likewise.
+	(asinl): Likewise.
+	(atan2f): Likewise.
+	(atan2l): Likewise.
+	(atanhf): Likewise.
+	(atanhl): Likewise.
+	(coshf): Likewise.
+	(coshl): Likewise.
+	(expf): Likewise.
+	(expl): Likewise.
+	(fmodf): Likewise.
+	(fmodl): Likewise.
+	(hypot): Change condition to [__USE_XOPEN || __USE_ISOC99].
+	(j0f): Change condition to [__USE_MISC && __USE_ISOC99].
+	(j0l): Likewise.
+	(y0f): Likewise.
+	(y0l): Likewise.
+	(j1f): Likewise.
+	(j1l): Likewise.
+	(y1f): Likewise.
+	(y1l): Likewise.
+	(jnf): Likewise.
+	(jnl): Likewise.
+	(ynf): Likewise.
+	(ynl): Likewise.
+	(lgammaf_r): Condition declaration on [__USE_ISOC99].
+	(lgammal_r): Likewise.
+	(__lgamma_r_finite): New declaration.
+	(__lgammaf_r_finite): Likewise.
+	(__lgammal_r_finite): Likewise.
+	(lgamma): Use __lgamma_r_finite.
+	(lgammaf): Condition definition on [__USE_ISOC99].  Use
+	__lgammaf_r_finite.
+	(lgammal): Condition definition on [__USE_ISOC99].  Use
+	__lgammal_r_finite.
+	(gamma): Do not define for [!__USE_MISC && __USE_XOPEN2K].  Use
+	__lgamma_r_finite.
+	(gammaf): Condition definition on [__USE_ISOC99].  Use
+	__lgammaf_r_finite.
+	(gammal): Condition definition on [__USE_ISOC99].  Use
+	__lgammal_r_finite.
+	(logf): Condition declaration on [__USE_ISOC99].
+	(logl): Likewise.
+	(log10f): Likewise.
+	(log10l): Likewise.
+	(ldexpf): Likewise.
+	(ldexpl): Likewise.
+	(powf): Likewise.
+	(powl): Likewise.
+	(remainder): Condition declaration on [__USE_XOPEN_EXTENDED ||
+	__USE_ISOC99].
+	(remainderf): Condition declaration on [__USE_ISOC99].
+	(remainderl): Likewise.
+	(scalb): Do not declare for [!__USE_MISC && __USE_XOPEN2K8].
+	(scalbf): Change condition to [__USE_MISC && __USE_ISOC99].
+	(scalbl): Likewise.
+	(sinhf): Condition declaration on [__USE_ISOC99].
+	(sinhl): Likewise.
+	(sqrtf): Likewise.
+	(sqrtl): Likewise.
+
 2015-11-04  Joseph Myers  <joseph@codesourcery.com>
 
 	* sysdeps/arm/atomic-machine.h
diff --git a/NEWS b/NEWS
index 048b94d223..2867ac0dd1 100644
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,7 @@ Version 2.23
   19003, 19007, 19012, 19016, 19018, 19032, 19046, 19048, 19049, 19050,
   19059, 19071, 19074, 19076, 19077, 19078, 19079, 19085, 19086, 19088,
   19094, 19095, 19124, 19125, 19129, 19134, 19137, 19156, 19174, 19181,
-  19189, 19201.
+  19189, 19201, 19205.
 
 * A defect in the malloc implementation, present since glibc 2.15 (2012) or
   glibc 2.10 via --enable-experimental-malloc (2009), could result in the
diff --git a/math/bits/math-finite.h b/math/bits/math-finite.h
index a9f4bf6afe..e5f11b2059 100644
--- a/math/bits/math-finite.h
+++ b/math/bits/math-finite.h
@@ -22,18 +22,22 @@
 
 /* acos.  */
 extern double __REDIRECT_NTH (acos, (double), __acos_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (acosf, (float), __acosf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (acosl, (long double), __acos_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (acosl, (long double), __acosl_finite);
+#  endif
 # endif
 #endif
 
 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 /* acosh.  */
 extern double __REDIRECT_NTH (acosh, (double), __acosh_finite);
+#endif
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (acoshf, (float), __acoshf_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -46,31 +50,37 @@ extern long double __REDIRECT_NTH (acoshl, (long double), __acoshl_finite);
 
 /* asin.  */
 extern double __REDIRECT_NTH (asin, (double), __asin_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (asinf, (float), __asinf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (asinl, (long double), __asin_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (asinl, (long double), __asinl_finite);
+#  endif
 # endif
 #endif
 
 /* atan2.  */
 extern double __REDIRECT_NTH (atan2, (double, double), __atan2_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (atan2f, (float, float), __atan2f_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (atan2l, (long double, long double),
 				   __atan2_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (atan2l, (long double, long double),
 				   __atan2l_finite);
+#  endif
 # endif
 #endif
 
 #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 /* atanh.  */
 extern double __REDIRECT_NTH (atanh, (double), __atanh_finite);
+#endif
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (atanhf, (float), __atanhf_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -83,23 +93,27 @@ extern long double __REDIRECT_NTH (atanhl, (long double), __atanhl_finite);
 
 /* cosh.  */
 extern double __REDIRECT_NTH (cosh, (double), __cosh_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (coshf, (float), __coshf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (coshl, (long double), __cosh_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (coshl, (long double), __coshl_finite);
+#  endif
 # endif
 #endif
 
 /* exp.  */
 extern double __REDIRECT_NTH (exp, (double), __exp_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (expf, (float), __expf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (expl, (long double), __exp_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (expl, (long double), __expl_finite);
+#  endif
 # endif
 #endif
 
@@ -142,20 +156,24 @@ extern long double __REDIRECT_NTH (exp2l, (long double), __exp2l_finite);
 
 /* fmod.  */
 extern double __REDIRECT_NTH (fmod, (double, double), __fmod_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (fmodf, (float, float), __fmodf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (fmodl, (long double, long double),
 				   __fmod_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (fmodl, (long double, long double),
 				   __fmodl_finite);
+#  endif
 # endif
 #endif
 
-#ifdef __USE_ISOC99
+#if defined __USE_XOPEN || defined __USE_ISOC99
 /* hypot.  */
 extern double __REDIRECT_NTH (hypot, (double, double), __hypot_finite);
+#endif
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (hypotf, (float, float), __hypotf_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -171,6 +189,8 @@ extern long double __REDIRECT_NTH (hypotl, (long double, long double),
 #if defined __USE_MISC || defined __USE_XOPEN
 /* j0.  */
 extern double __REDIRECT_NTH (j0, (double), __j0_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (j0f, (float), __j0f_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -179,9 +199,13 @@ extern long double __REDIRECT_NTH (j0l, (long double), __j0_finite);
 extern long double __REDIRECT_NTH (j0l, (long double), __j0l_finite);
 #  endif
 # endif
+#endif
 
+#if defined __USE_MISC || defined __USE_XOPEN
 /* y0.  */
 extern double __REDIRECT_NTH (y0, (double), __y0_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (y0f, (float), __y0f_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -190,9 +214,13 @@ extern long double __REDIRECT_NTH (y0l, (long double), __y0_finite);
 extern long double __REDIRECT_NTH (y0l, (long double), __y0l_finite);
 #  endif
 # endif
+#endif
 
+#if defined __USE_MISC || defined __USE_XOPEN
 /* j1.  */
 extern double __REDIRECT_NTH (j1, (double), __j1_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (j1f, (float), __j1f_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -201,9 +229,13 @@ extern long double __REDIRECT_NTH (j1l, (long double), __j1_finite);
 extern long double __REDIRECT_NTH (j1l, (long double), __j1l_finite);
 #  endif
 # endif
+#endif
 
+#if defined __USE_MISC || defined __USE_XOPEN
 /* y1.  */
 extern double __REDIRECT_NTH (y1, (double), __y1_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (y1f, (float), __y1f_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -212,9 +244,13 @@ extern long double __REDIRECT_NTH (y1l, (long double), __y1_finite);
 extern long double __REDIRECT_NTH (y1l, (long double), __y1l_finite);
 #  endif
 # endif
+#endif
 
+#if defined __USE_MISC || defined __USE_XOPEN
 /* jn.  */
 extern double __REDIRECT_NTH (jn, (int, double), __jn_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (jnf, (int, float), __jnf_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -223,9 +259,13 @@ extern long double __REDIRECT_NTH (jnl, (int, long double), __jn_finite);
 extern long double __REDIRECT_NTH (jnl, (int, long double), __jnl_finite);
 #  endif
 # endif
+#endif
 
+#if defined __USE_MISC || defined __USE_XOPEN
 /* yn.  */
 extern double __REDIRECT_NTH (yn, (int, double), __yn_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (ynf, (int, float), __ynf_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -239,18 +279,29 @@ extern long double __REDIRECT_NTH (ynl, (int, long double), __ynl_finite);
 #ifdef __USE_MISC
 /* lgamma_r.  */
 extern double __REDIRECT_NTH (lgamma_r, (double, int *), __lgamma_r_finite);
+# ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (lgammaf_r, (float, int *), __lgammaf_r_finite);
-# ifdef __MATH_DECLARE_LDOUBLE
-#  ifdef __NO_LONG_DOUBLE_MATH
+#  ifdef __MATH_DECLARE_LDOUBLE
+#   ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
 				   __lgamma_r_finite);
-#  else
+#   else
 extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
 				   __lgammal_r_finite);
+#   endif
 #  endif
 # endif
 #endif
 
+extern double __lgamma_r_finite (double, int *);
+extern float __lgammaf_r_finite (float, int *);
+#ifdef __NO_LONG_DOUBLE_MATH
+extern long double __REDIRECT_NTH (__lgammal_r_finite, (long double, int *),
+				   __lgamma_r_finite);
+#else
+extern long double __lgammal_r_finite (long double, int *);
+#endif
+
 #if ((defined __USE_XOPEN || defined __USE_ISOC99) \
      && defined __extern_always_inline)
 /* lgamma.  */
@@ -258,18 +309,20 @@ __extern_always_inline double __NTH (lgamma (double __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
-  return lgamma_r (__d, &__local_signgam);
+  return __lgamma_r_finite (__d, &__local_signgam);
 # else
-  return lgamma_r (__d, &signgam);
+  return __lgamma_r_finite (__d, &signgam);
 # endif
 }
+#endif
+#if defined __USE_ISOC99 && defined __extern_always_inline
 __extern_always_inline float __NTH (lgammaf (float __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
-  return lgammaf_r (__d, &__local_signgam);
+  return __lgammaf_r_finite (__d, &__local_signgam);
 # else
-  return lgammaf_r (__d, &signgam);
+  return __lgammaf_r_finite (__d, &signgam);
 # endif
 }
 # ifdef __MATH_DECLARE_LDOUBLE
@@ -277,67 +330,73 @@ __extern_always_inline long double __NTH (lgammal (long double __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
-  return lgammal_r (__d, &__local_signgam);
+  return __lgammal_r_finite (__d, &__local_signgam);
 # else
-  return lgammal_r (__d, &signgam);
+  return __lgammal_r_finite (__d, &signgam);
 # endif
 }
 # endif
 #endif
 
-#if ((defined __USE_MISC || defined __USE_XOPEN) \
+#if ((defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)) \
      && defined __extern_always_inline)
 /* gamma.  */
 __extern_always_inline double __NTH (gamma (double __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
-  return lgamma_r (__d, &__local_signgam);
+  return __lgamma_r_finite (__d, &__local_signgam);
 # else
-  return lgamma_r (__d, &signgam);
+  return __lgamma_r_finite (__d, &signgam);
 # endif
 }
+# ifdef __USE_ISOC99
 __extern_always_inline float __NTH (gammaf (float __d))
 {
-# ifdef __USE_ISOC99
+#  ifdef __USE_ISOC99
   int __local_signgam = 0;
-  return lgammaf_r (__d, &__local_signgam);
-# else
-  return lgammaf_r (__d, &signgam);
-# endif
+  return __lgammaf_r_finite (__d, &__local_signgam);
+#  else
+  return __lgammaf_r_finite (__d, &signgam);
+#  endif
 }
-# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __MATH_DECLARE_LDOUBLE
 __extern_always_inline long double __NTH (gammal (long double __d))
 {
-#  ifdef __USE_ISOC99
+#   ifdef __USE_ISOC99
   int __local_signgam = 0;
-  return lgammal_r (__d, &__local_signgam);
-#  else
-  return lgammal_r (__d, &signgam);
-#  endif
+  return __lgammal_r_finite (__d, &__local_signgam);
+#   else
+  return __lgammal_r_finite (__d, &signgam);
+#   endif
 }
+#  endif
 # endif
 #endif
 
 /* log.  */
 extern double __REDIRECT_NTH (log, (double), __log_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (logf, (float), __logf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (logl, (long double), __log_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (logl, (long double), __logl_finite);
+#  endif
 # endif
 #endif
 
 /* log10.  */
 extern double __REDIRECT_NTH (log10, (double), __log10_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (log10f, (float), __log10f_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (log10l, (long double), __log10_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (log10l, (long double), __log10l_finite);
+#  endif
 # endif
 #endif
 
@@ -356,40 +415,51 @@ extern long double __REDIRECT_NTH (log2l, (long double), __log2l_finite);
 
 /* ldexp.  */
 extern double __REDIRECT_NTH (ldexp, (double, int), scalbn);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (ldexpf, (float, int), scalbnf);
-#ifdef __MATH_DECLARE_LDOUBLE
+# ifdef __MATH_DECLARE_LDOUBLE
 extern long double __REDIRECT_NTH (ldexpl, (long double, int), scalbnl);
+# endif
 #endif
 
 /* pow.  */
 extern double __REDIRECT_NTH (pow, (double, double), __pow_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (powf, (float, float), __powf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (powl, (long double, long double),
 				   __pow_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (powl, (long double, long double),
 				   __powl_finite);
+#  endif
 # endif
 #endif
 
+#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 /* remainder.  */
 extern double __REDIRECT_NTH (remainder, (double, double), __remainder_finite);
+#endif
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (remainderf, (float, float), __remainderf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (remainderl, (long double, long double),
 				   __remainder_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (remainderl, (long double, long double),
 				   __remainderl_finite);
+#  endif
 # endif
 #endif
 
-#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+#if (defined __USE_MISC							\
+     || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8))
 /* scalb.  */
 extern double __REDIRECT_NTH (scalb, (double, double), __scalb_finite);
+#endif
+#if defined __USE_MISC && defined __USE_ISOC99
 extern float __REDIRECT_NTH (scalbf, (float, float), __scalbf_finite);
 # ifdef __MATH_DECLARE_LDOUBLE
 #  ifdef __NO_LONG_DOUBLE_MATH
@@ -404,23 +474,27 @@ extern long double __REDIRECT_NTH (scalbl, (long double, long double),
 
 /* sinh.  */
 extern double __REDIRECT_NTH (sinh, (double), __sinh_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (sinhf, (float), __sinhf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (sinhl, (long double), __sinh_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (sinhl, (long double), __sinhl_finite);
+#  endif
 # endif
 #endif
 
 /* sqrt.  */
 extern double __REDIRECT_NTH (sqrt, (double), __sqrt_finite);
+#ifdef __USE_ISOC99
 extern float __REDIRECT_NTH (sqrtf, (float), __sqrtf_finite);
-#ifdef __MATH_DECLARE_LDOUBLE
-# ifdef __NO_LONG_DOUBLE_MATH
+# ifdef __MATH_DECLARE_LDOUBLE
+#  ifdef __NO_LONG_DOUBLE_MATH
 extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrt_finite);
-# else
+#  else
 extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrtl_finite);
+#  endif
 # endif
 #endif