diff options
author | Joseph Myers <joseph@codesourcery.com> | 2015-11-05 00:48:57 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2015-11-05 00:48:57 +0000 |
commit | 3bfee8beb8caa939020d942dfa405a3d98975749 (patch) | |
tree | f62482f0febbd4a944cd60b8d96c4be378d29789 | |
parent | 9f9f27248bf464b465fd4f05112a5b479503e83a (diff) | |
download | glibc-3bfee8beb8caa939020d942dfa405a3d98975749.tar glibc-3bfee8beb8caa939020d942dfa405a3d98975749.tar.gz glibc-3bfee8beb8caa939020d942dfa405a3d98975749.tar.bz2 glibc-3bfee8beb8caa939020d942dfa405a3d98975749.zip |
Make bits/math-finite.h conditions match other headers (bug 19205).
bits/math-finite.h declares -ffinite-math-only variants of various
functions under conditions not matching those under which the normal
versions are declared.
* math.h only ever includes bits/mathcalls.h to declare float and long
double functions if __USE_ISOC99, but bits/math-finite.h declares
some float functions regardless (long double ones are conditioned on
__MATH_DECLARE_LDOUBLE). (For C90 functions this isn't a
conformance bug because C90 reserves the float and long double
names, but is still contrary to good glibc practice. For some other
functions in older XSI standards it *is* a conformance bug.)
* Some functions are defined as inlines using lgamma_r functions under
conditions where those lgamma_r functions are not themselves
declared.
* hypot is declared under __USE_XOPEN || __USE_ISOC99 in
bits/mathcalls.h, __USE_ISOC99 only in bits/math-finite.h.
* float and long double versions of Bessel functions should be limited
to __USE_MISC (as in bug 18977).
* gamma should not be declared for __USE_XOPEN2K (as in bug 18967).
* remainder should be restricted to __USE_XOPEN_EXTENDED ||
__USE_ISOC99, not unconditional.
* scalb should not be declared for __USE_XOPEN2K8, and scalbf and
scalbl are non-POSIX (as in bug 18967).
This patch fixes all these issues (it doesn't seem worth splitting
them into separate patches or bugs). I put __USE_ISOC99 conditionals,
where needed, around both float and long double declarations, even
though formally redundant around the long double declarations because
__MATH_DECLARE_LDOUBLE isn't defined without __USE_ISOC99; it seemed
clearer that way. The missing declarations of lgamma_r functions are
dealt with by directly using declarations of __lgamma*_r_finite, in
the implementation namespace, rather than having the inlines rely on
asm redirection of lgamma*_r.
After this patch, there are some apparently redundant nested
__USE_ISOC99 conditionals in lgamma / gamma definitions. These
actually reflect a separate bug (the correct condition for the lgamma
inline functions to set signgam is __USE_MISC || __USE_XOPEN, the
condition under which signgam is declared, rather than disabling
setting it if __USE_ISOC99, which includes XSI POSIX versions for
which signgam *should* be set). They'll be fixed as part of a fix for
that bug, which will also add tests for these inlines. I've put a
note about more general conform/ test coverage for -ffinite-math-only
on
<https://sourceware.org/glibc/wiki/Development_Todo/Master#conformtest_improvements>,
alongside other options for which this is also relevant (some of which
have also had such bugs in the past relating to mismatched
conditionals).
I also intend to enable the main libm-test.inc tests for the
math-finite.h functions, but some other bugs in __*_finite need fixing
first.
[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.
-rw-r--r-- | ChangeLog | 69 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | math/bits/math-finite.h | 198 |
3 files changed, 206 insertions, 63 deletions
@@ -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 @@ -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 |