With the latest Solaris 11.3 SRU, the C++11 <math.h> overloads have been backported to Solaris 11.3. While mainline and the gcc-5 branch already cope with this due to
https://gcc.gnu.org/ml/gcc-patches/2015-11/msg02075.html this broke Solaris 11 bootstrap on the 4.9 branch. Therefore I'd like to backport the patch to the 4.9 branch, too. The version applied to the gcc-5 branch required a minimal change to the testcase only. Bootstrapped on i386-pc-solaris2.11, ok for 4.9 branch? Rainer 2016-02-21 Rainer Orth <r...@cebitec.uni-bielefeld.de> Backport from mainline 2015-11-24 Rainer Orth <r...@cebitec.uni-bielefeld.de> * acinclude.m4 (GLIBCXX_CHECK_MATH11_PROTO): New test. * configure.ac: Use it. * configure: Regenerate. * config.h.in: Regenerate. * include/c_global/cmath [__cplusplus >= 201103L] (std::fpclassify): Wrap in !__CORRECT_ISO_CPP11_MATH_H_PROTO. (std::isfinite): Likewise. (std::isinf): Likewise. (std::isnan): Likewise. (std::isnormal): Likewise. (std::signbit): Likewise. (std::isgreater): Likewise. (std::isgreaterequal): Likewise. (std::isless): Likewise. (std::islessequal): Likewise. (std::islessgreater): Likewise. (std::isunordered): Likewise. (std::acosh): Likewise. (std::asinh): Likewise. (std::atanh): Likewise. (std::cbrt): Likewise. (std::copysign): Likewise. (std::erf): Likewise. (std::erfc): Likewise. (std::exp2): Likewise. (std::expm1): Likewise. (std::fdim): Likewise. (std::fma): Likewise. (std::fmax): Likewise. (std::fmin): Likewise. (std::hypot): Likewise. (std::ilogb): Likewise. (std::lgamma): Likewise. (std::llrint): Likewise. (std::llround): Likewise. (std::log1p): Likewise. (std::log2): Likewise. (std::logb): Likewise. (std::lrint): Likewise. (std::lround): Likewise. (std::nearbyint): Likewise. (std::nextafter): Likewise. (std::nexttoward): Likewise. (std::remainder): Likewise. (std::remquo): Likewise. (std::rint): Likewise. (std::round): Likewise. (std::scalbln): Likewise. (std::scalbn): Likewise. (std::tgamma): Likewise. (std::trunc): Likewise. * include/tr1/cmath [_GLIBCXX_USE_C99_MATH_TR1] (std::tr1::acosh): Wrap in !__CORRECT_ISO_CPP11_MATH_H_PROTO. (std::tr1::asinh): Likewise. (std::tr1::atanh): Likewise. (std::tr1::cbrt): Likewise. (std::tr1::copysign): Likewise. (std::tr1::erf): Likewise. (std::tr1::erfc): Likewise. (std::tr1::exp2): Likewise. (std::tr1::expm1): Likewise. (std::tr1::fabs): Likewise. (std::tr1::fdim): Likewise. (std::tr1::fma): Likewise. (std::tr1::fmax): Likewise. (std::tr1::fmin): Likewise. (std::tr1::hypot): Likewise. (std::tr1::ilogb): Likewise. (std::tr1::lgamma): Likewise. (std::tr1::llrint): Likewise. (std::tr1::llround): Likewise. (std::tr1::log1p): Likewise. (std::tr1::log2): Likewise. (std::tr1::logb): Likewise. (std::tr1::lrint): Likewise. (std::tr1::lround): Likewise. (std::tr1::nearbyint): Likewise. (std::tr1::nextafter): Likewise. (std::tr1::nexttoward): Likewise. (std::tr1::remainder): Likewise. (std::tr1::remquo): Likewise. (std::tr1::rint): Likewise. (std::tr1::scalbln): Likewise. (std::tr1::scalbn): Likewise. (std::tr1::tgamma): Likewise. (std::tr1::trunc): Likewise. (std::tr1::pow): Likewise. * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc: Restrict dg-xfail-if, dg-excess-errors to *-*-solaris2.10*.
# HG changeset patch # Parent 55fc447d161a7966550a9bbfff90094cf0ddb9bf Handle C++11 <math.h> overloads on Solaris 12 diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -1897,6 +1897,52 @@ AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [ ]) dnl +dnl Check whether required C++11 overloads are present in <math.h>. +dnl +AC_DEFUN([GLIBCXX_CHECK_MATH11_PROTO], [ + + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -std=c++11" + + case "$host" in + *-*-solaris2.*) + # Solaris 12 introduced the C++11 <math.h> overloads. A backport to + # a Solaris 11.3 SRU is likely, maybe even a Solaris 10 patch. + AC_MSG_CHECKING([for C++11 <math.h> overloads]) + AC_CACHE_VAL(glibcxx_cv_math11_overload, [ + AC_COMPILE_IFELSE([AC_LANG_SOURCE( + [#include <math.h> + #undef isfinite + namespace std { + inline bool isfinite(float __x) + { return __builtin_isfinite(__x); } + } + ])], + [glibcxx_cv_math11_overload=no], + [glibcxx_cv_math11_overload=yes] + )]) + + # autoheader cannot handle indented templates. + AH_VERBATIM([__CORRECT_ISO_CPP11_MATH_H_PROTO], + [/* Define if all C++11 overloads are available in <math.h>. */ +#if __cplusplus >= 201103L +#undef __CORRECT_ISO_CPP11_MATH_H_PROTO +#endif]) + + if test $glibcxx_cv_math11_overload = yes; then + AC_DEFINE(__CORRECT_ISO_CPP11_MATH_H_PROTO) + fi + AC_MSG_RESULT([$glibcxx_cv_math11_overload]) + ;; + esac + + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE +]) + +dnl dnl Check whether macros, etc are present for <system_error> dnl AC_DEFUN([GLIBCXX_CHECK_SYSTEM_ERROR], [ diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -178,6 +178,7 @@ GLIBCXX_ENABLE_VTABLE_VERIFY([no]) # Checks for operating systems support that doesn't require linking. GLIBCXX_CHECK_STDIO_PROTO +GLIBCXX_CHECK_MATH11_PROTO GLIBCXX_CHECK_SYSTEM_ERROR # For the streamoff typedef. diff --git a/libstdc++-v3/include/c_global/cmath b/libstdc++-v3/include/c_global/cmath --- a/libstdc++-v3/include/c_global/cmath +++ b/libstdc++-v3/include/c_global/cmath @@ -557,6 +557,8 @@ namespace std _GLIBCXX_VISIBILITY(defaul _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus >= 201103L + +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr int fpclassify(float __x) { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, @@ -571,6 +573,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul fpclassify(long double __x) { return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -578,6 +581,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul fpclassify(_Tp __x) { return __x != 0 ? FP_NORMAL : FP_ZERO; } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isfinite(float __x) { return __builtin_isfinite(__x); } @@ -589,6 +593,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isfinite(long double __x) { return __builtin_isfinite(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -596,6 +601,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul isfinite(_Tp __x) { return true; } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isinf(float __x) { return __builtin_isinf(__x); } @@ -607,6 +613,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isinf(long double __x) { return __builtin_isinf(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -614,6 +621,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul isinf(_Tp __x) { return false; } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isnan(float __x) { return __builtin_isnan(__x); } @@ -625,6 +633,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isnan(long double __x) { return __builtin_isnan(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -632,6 +641,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul isnan(_Tp __x) { return false; } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isnormal(float __x) { return __builtin_isnormal(__x); } @@ -643,6 +653,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isnormal(long double __x) { return __builtin_isnormal(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -650,6 +661,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul isnormal(_Tp __x) { return __x != 0 ? true : false; } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO // The front-end doesn't provide a type generic builtin (libstdc++/58625). constexpr bool signbit(float __x) @@ -662,6 +674,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool signbit(long double __x) { return __builtin_signbitl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -669,6 +682,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul signbit(_Tp __x) { return __x < 0 ? true : false; } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isgreater(float __x, float __y) { return __builtin_isgreater(__x, __y); } @@ -680,6 +694,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isgreater(long double __x, long double __y) { return __builtin_isgreater(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename @@ -691,6 +706,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return __builtin_isgreater(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isgreaterequal(float __x, float __y) { return __builtin_isgreaterequal(__x, __y); } @@ -702,6 +718,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isgreaterequal(long double __x, long double __y) { return __builtin_isgreaterequal(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename @@ -713,6 +730,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return __builtin_isgreaterequal(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isless(float __x, float __y) { return __builtin_isless(__x, __y); } @@ -724,6 +742,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isless(long double __x, long double __y) { return __builtin_isless(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename @@ -735,6 +754,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return __builtin_isless(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool islessequal(float __x, float __y) { return __builtin_islessequal(__x, __y); } @@ -746,6 +766,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool islessequal(long double __x, long double __y) { return __builtin_islessequal(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename @@ -757,6 +778,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return __builtin_islessequal(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool islessgreater(float __x, float __y) { return __builtin_islessgreater(__x, __y); } @@ -768,6 +790,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool islessgreater(long double __x, long double __y) { return __builtin_islessgreater(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename @@ -779,6 +802,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return __builtin_islessgreater(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr bool isunordered(float __x, float __y) { return __builtin_isunordered(__x, __y); } @@ -790,6 +814,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr bool isunordered(long double __x, long double __y) { return __builtin_isunordered(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename @@ -1184,6 +1209,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul using ::truncl; /// Additional overloads. +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float acosh(float __x) { return __builtin_acoshf(__x); } @@ -1191,6 +1217,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double acosh(long double __x) { return __builtin_acoshl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1198,6 +1225,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul acosh(_Tp __x) { return __builtin_acosh(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float asinh(float __x) { return __builtin_asinhf(__x); } @@ -1205,6 +1233,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double asinh(long double __x) { return __builtin_asinhl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1212,6 +1241,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul asinh(_Tp __x) { return __builtin_asinh(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float atanh(float __x) { return __builtin_atanhf(__x); } @@ -1219,6 +1249,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double atanh(long double __x) { return __builtin_atanhl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1226,6 +1257,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul atanh(_Tp __x) { return __builtin_atanh(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float cbrt(float __x) { return __builtin_cbrtf(__x); } @@ -1233,6 +1265,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double cbrt(long double __x) { return __builtin_cbrtl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1240,6 +1273,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul cbrt(_Tp __x) { return __builtin_cbrt(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float copysign(float __x, float __y) { return __builtin_copysignf(__x, __y); } @@ -1247,6 +1281,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double copysign(long double __x, long double __y) { return __builtin_copysignl(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1256,6 +1291,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return copysign(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float erf(float __x) { return __builtin_erff(__x); } @@ -1263,6 +1299,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double erf(long double __x) { return __builtin_erfl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1270,6 +1307,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul erf(_Tp __x) { return __builtin_erf(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float erfc(float __x) { return __builtin_erfcf(__x); } @@ -1277,6 +1315,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double erfc(long double __x) { return __builtin_erfcl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1284,6 +1323,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul erfc(_Tp __x) { return __builtin_erfc(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float exp2(float __x) { return __builtin_exp2f(__x); } @@ -1291,6 +1331,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double exp2(long double __x) { return __builtin_exp2l(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1298,6 +1339,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul exp2(_Tp __x) { return __builtin_exp2(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float expm1(float __x) { return __builtin_expm1f(__x); } @@ -1305,6 +1347,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double expm1(long double __x) { return __builtin_expm1l(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1312,6 +1355,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul expm1(_Tp __x) { return __builtin_expm1(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float fdim(float __x, float __y) { return __builtin_fdimf(__x, __y); } @@ -1319,6 +1363,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double fdim(long double __x, long double __y) { return __builtin_fdiml(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1328,6 +1373,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return fdim(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float fma(float __x, float __y, float __z) { return __builtin_fmaf(__x, __y, __z); } @@ -1335,6 +1381,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double fma(long double __x, long double __y, long double __z) { return __builtin_fmal(__x, __y, __z); } +#endif template<typename _Tp, typename _Up, typename _Vp> constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type @@ -1344,6 +1391,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return fma(__type(__x), __type(__y), __type(__z)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float fmax(float __x, float __y) { return __builtin_fmaxf(__x, __y); } @@ -1351,6 +1399,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double fmax(long double __x, long double __y) { return __builtin_fmaxl(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1360,6 +1409,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return fmax(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float fmin(float __x, float __y) { return __builtin_fminf(__x, __y); } @@ -1367,6 +1417,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double fmin(long double __x, long double __y) { return __builtin_fminl(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1376,6 +1427,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return fmin(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float hypot(float __x, float __y) { return __builtin_hypotf(__x, __y); } @@ -1383,6 +1435,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double hypot(long double __x, long double __y) { return __builtin_hypotl(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1392,6 +1445,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return hypot(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr int ilogb(float __x) { return __builtin_ilogbf(__x); } @@ -1399,6 +1453,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr int ilogb(long double __x) { return __builtin_ilogbl(__x); } +#endif template<typename _Tp> constexpr @@ -1407,6 +1462,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul ilogb(_Tp __x) { return __builtin_ilogb(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float lgamma(float __x) { return __builtin_lgammaf(__x); } @@ -1414,6 +1470,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double lgamma(long double __x) { return __builtin_lgammal(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1421,6 +1478,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul lgamma(_Tp __x) { return __builtin_lgamma(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr long long llrint(float __x) { return __builtin_llrintf(__x); } @@ -1428,6 +1486,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long long llrint(long double __x) { return __builtin_llrintl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1435,6 +1494,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul llrint(_Tp __x) { return __builtin_llrint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr long long llround(float __x) { return __builtin_llroundf(__x); } @@ -1442,6 +1502,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long long llround(long double __x) { return __builtin_llroundl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1449,6 +1510,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul llround(_Tp __x) { return __builtin_llround(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float log1p(float __x) { return __builtin_log1pf(__x); } @@ -1456,6 +1518,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double log1p(long double __x) { return __builtin_log1pl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1463,6 +1526,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul log1p(_Tp __x) { return __builtin_log1p(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO // DR 568. constexpr float log2(float __x) @@ -1471,6 +1535,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double log2(long double __x) { return __builtin_log2l(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1478,6 +1543,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul log2(_Tp __x) { return __builtin_log2(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float logb(float __x) { return __builtin_logbf(__x); } @@ -1485,6 +1551,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double logb(long double __x) { return __builtin_logbl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1492,6 +1559,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul logb(_Tp __x) { return __builtin_logb(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr long lrint(float __x) { return __builtin_lrintf(__x); } @@ -1499,6 +1567,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long lrint(long double __x) { return __builtin_lrintl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1506,6 +1575,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul lrint(_Tp __x) { return __builtin_lrint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr long lround(float __x) { return __builtin_lroundf(__x); } @@ -1513,6 +1583,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long lround(long double __x) { return __builtin_lroundl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1520,6 +1591,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul lround(_Tp __x) { return __builtin_lround(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float nearbyint(float __x) { return __builtin_nearbyintf(__x); } @@ -1527,6 +1599,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double nearbyint(long double __x) { return __builtin_nearbyintl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1534,6 +1607,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul nearbyint(_Tp __x) { return __builtin_nearbyint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float nextafter(float __x, float __y) { return __builtin_nextafterf(__x, __y); } @@ -1541,6 +1615,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double nextafter(long double __x, long double __y) { return __builtin_nextafterl(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1550,6 +1625,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return nextafter(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float nexttoward(float __x, long double __y) { return __builtin_nexttowardf(__x, __y); } @@ -1557,6 +1633,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double nexttoward(long double __x, long double __y) { return __builtin_nexttowardl(__x, __y); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1564,6 +1641,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul nexttoward(_Tp __x, long double __y) { return __builtin_nexttoward(__x, __y); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float remainder(float __x, float __y) { return __builtin_remainderf(__x, __y); } @@ -1571,6 +1649,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double remainder(long double __x, long double __y) { return __builtin_remainderl(__x, __y); } +#endif template<typename _Tp, typename _Up> constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1580,6 +1659,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return remainder(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float remquo(float __x, float __y, int* __pquo) { return __builtin_remquof(__x, __y, __pquo); } @@ -1587,6 +1667,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul inline long double remquo(long double __x, long double __y, int* __pquo) { return __builtin_remquol(__x, __y, __pquo); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -1596,6 +1677,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul return remquo(__type(__x), __type(__y), __pquo); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float rint(float __x) { return __builtin_rintf(__x); } @@ -1603,6 +1685,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double rint(long double __x) { return __builtin_rintl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1610,6 +1693,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul rint(_Tp __x) { return __builtin_rint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float round(float __x) { return __builtin_roundf(__x); } @@ -1617,6 +1701,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double round(long double __x) { return __builtin_roundl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1624,6 +1709,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul round(_Tp __x) { return __builtin_round(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float scalbln(float __x, long __ex) { return __builtin_scalblnf(__x, __ex); } @@ -1631,6 +1717,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double scalbln(long double __x, long __ex) { return __builtin_scalblnl(__x, __ex); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1638,6 +1725,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul scalbln(_Tp __x, long __ex) { return __builtin_scalbln(__x, __ex); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float scalbn(float __x, int __ex) { return __builtin_scalbnf(__x, __ex); } @@ -1645,6 +1733,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double scalbn(long double __x, int __ex) { return __builtin_scalbnl(__x, __ex); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1652,6 +1741,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul scalbn(_Tp __x, int __ex) { return __builtin_scalbn(__x, __ex); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float tgamma(float __x) { return __builtin_tgammaf(__x); } @@ -1659,6 +1749,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double tgamma(long double __x) { return __builtin_tgammal(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -1666,6 +1757,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul tgamma(_Tp __x) { return __builtin_tgamma(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO constexpr float trunc(float __x) { return __builtin_truncf(__x); } @@ -1673,6 +1765,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul constexpr long double trunc(long double __x) { return __builtin_truncl(__x); } +#endif template<typename _Tp> constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath --- a/libstdc++-v3/include/tr1/cmath +++ b/libstdc++-v3/include/tr1/cmath @@ -419,6 +419,7 @@ namespace tr1 /// Additional overloads [8.16.4]. using std::acos; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float acosh(float __x) { return __builtin_acoshf(__x); } @@ -426,6 +427,7 @@ namespace tr1 inline long double acosh(long double __x) { return __builtin_acoshl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -435,6 +437,7 @@ namespace tr1 using std::asin; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float asinh(float __x) { return __builtin_asinhf(__x); } @@ -442,6 +445,7 @@ namespace tr1 inline long double asinh(long double __x) { return __builtin_asinhl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -452,6 +456,7 @@ namespace tr1 using std::atan; using std::atan2; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float atanh(float __x) { return __builtin_atanhf(__x); } @@ -459,6 +464,7 @@ namespace tr1 inline long double atanh(long double __x) { return __builtin_atanhl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -466,6 +472,7 @@ namespace tr1 atanh(_Tp __x) { return __builtin_atanh(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float cbrt(float __x) { return __builtin_cbrtf(__x); } @@ -473,6 +480,7 @@ namespace tr1 inline long double cbrt(long double __x) { return __builtin_cbrtl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -482,6 +490,7 @@ namespace tr1 using std::ceil; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float copysign(float __x, float __y) { return __builtin_copysignf(__x, __y); } @@ -489,6 +498,7 @@ namespace tr1 inline long double copysign(long double __x, long double __y) { return __builtin_copysignl(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -501,6 +511,7 @@ namespace tr1 using std::cos; using std::cosh; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float erf(float __x) { return __builtin_erff(__x); } @@ -508,6 +519,7 @@ namespace tr1 inline long double erf(long double __x) { return __builtin_erfl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -515,6 +527,7 @@ namespace tr1 erf(_Tp __x) { return __builtin_erf(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float erfc(float __x) { return __builtin_erfcf(__x); } @@ -522,6 +535,7 @@ namespace tr1 inline long double erfc(long double __x) { return __builtin_erfcl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -531,6 +545,7 @@ namespace tr1 using std::exp; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float exp2(float __x) { return __builtin_exp2f(__x); } @@ -538,6 +553,7 @@ namespace tr1 inline long double exp2(long double __x) { return __builtin_exp2l(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -545,6 +561,7 @@ namespace tr1 exp2(_Tp __x) { return __builtin_exp2(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float expm1(float __x) { return __builtin_expm1f(__x); } @@ -552,6 +569,7 @@ namespace tr1 inline long double expm1(long double __x) { return __builtin_expm1l(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -568,6 +586,7 @@ namespace tr1 using ::fabs; #ifndef __CORRECT_ISO_CPP_MATH_H_PROTO +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float fabs(float __x) { return __builtin_fabsf(__x); } @@ -575,6 +594,7 @@ namespace tr1 inline long double fabs(long double __x) { return __builtin_fabsl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -583,6 +603,7 @@ namespace tr1 { return __builtin_fabs(__x); } #endif +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float fdim(float __x, float __y) { return __builtin_fdimf(__x, __y); } @@ -590,6 +611,7 @@ namespace tr1 inline long double fdim(long double __x, long double __y) { return __builtin_fdiml(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -601,6 +623,7 @@ namespace tr1 using std::floor; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float fma(float __x, float __y, float __z) { return __builtin_fmaf(__x, __y, __z); } @@ -608,6 +631,7 @@ namespace tr1 inline long double fma(long double __x, long double __y, long double __z) { return __builtin_fmal(__x, __y, __z); } +#endif template<typename _Tp, typename _Up, typename _Vp> inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type @@ -617,6 +641,7 @@ namespace tr1 return fma(__type(__x), __type(__y), __type(__z)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float fmax(float __x, float __y) { return __builtin_fmaxf(__x, __y); } @@ -624,6 +649,7 @@ namespace tr1 inline long double fmax(long double __x, long double __y) { return __builtin_fmaxl(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -633,6 +659,7 @@ namespace tr1 return fmax(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float fmin(float __x, float __y) { return __builtin_fminf(__x, __y); } @@ -640,6 +667,7 @@ namespace tr1 inline long double fmin(long double __x, long double __y) { return __builtin_fminl(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -652,6 +680,7 @@ namespace tr1 using std::fmod; using std::frexp; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float hypot(float __x, float __y) { return __builtin_hypotf(__x, __y); } @@ -659,6 +688,7 @@ namespace tr1 inline long double hypot(long double __x, long double __y) { return __builtin_hypotl(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -668,6 +698,7 @@ namespace tr1 return hypot(__type(__y), __type(__x)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline int ilogb(float __x) { return __builtin_ilogbf(__x); } @@ -675,6 +706,7 @@ namespace tr1 inline int ilogb(long double __x) { return __builtin_ilogbl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -684,6 +716,7 @@ namespace tr1 using std::ldexp; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float lgamma(float __x) { return __builtin_lgammaf(__x); } @@ -691,6 +724,7 @@ namespace tr1 inline long double lgamma(long double __x) { return __builtin_lgammal(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -698,6 +732,7 @@ namespace tr1 lgamma(_Tp __x) { return __builtin_lgamma(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline long long llrint(float __x) { return __builtin_llrintf(__x); } @@ -705,6 +740,7 @@ namespace tr1 inline long long llrint(long double __x) { return __builtin_llrintl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -712,6 +748,7 @@ namespace tr1 llrint(_Tp __x) { return __builtin_llrint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline long long llround(float __x) { return __builtin_llroundf(__x); } @@ -719,6 +756,7 @@ namespace tr1 inline long long llround(long double __x) { return __builtin_llroundl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -729,6 +767,7 @@ namespace tr1 using std::log; using std::log10; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float log1p(float __x) { return __builtin_log1pf(__x); } @@ -736,6 +775,7 @@ namespace tr1 inline long double log1p(long double __x) { return __builtin_log1pl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -744,6 +784,7 @@ namespace tr1 { return __builtin_log1p(__x); } // DR 568. +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float log2(float __x) { return __builtin_log2f(__x); } @@ -751,6 +792,7 @@ namespace tr1 inline long double log2(long double __x) { return __builtin_log2l(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -758,6 +800,7 @@ namespace tr1 log2(_Tp __x) { return __builtin_log2(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float logb(float __x) { return __builtin_logbf(__x); } @@ -765,6 +808,7 @@ namespace tr1 inline long double logb(long double __x) { return __builtin_logbl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -774,6 +818,7 @@ namespace tr1 return __builtin_logb(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline long lrint(float __x) { return __builtin_lrintf(__x); } @@ -781,6 +826,7 @@ namespace tr1 inline long lrint(long double __x) { return __builtin_lrintl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -788,6 +834,7 @@ namespace tr1 lrint(_Tp __x) { return __builtin_lrint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline long lround(float __x) { return __builtin_lroundf(__x); } @@ -795,6 +842,7 @@ namespace tr1 inline long lround(long double __x) { return __builtin_lroundl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -802,6 +850,7 @@ namespace tr1 lround(_Tp __x) { return __builtin_lround(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float nearbyint(float __x) { return __builtin_nearbyintf(__x); } @@ -809,6 +858,7 @@ namespace tr1 inline long double nearbyint(long double __x) { return __builtin_nearbyintl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -816,6 +866,7 @@ namespace tr1 nearbyint(_Tp __x) { return __builtin_nearbyint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float nextafter(float __x, float __y) { return __builtin_nextafterf(__x, __y); } @@ -823,6 +874,7 @@ namespace tr1 inline long double nextafter(long double __x, long double __y) { return __builtin_nextafterl(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -832,6 +884,7 @@ namespace tr1 return nextafter(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float nexttoward(float __x, long double __y) { return __builtin_nexttowardf(__x, __y); } @@ -839,6 +892,7 @@ namespace tr1 inline long double nexttoward(long double __x, long double __y) { return __builtin_nexttowardl(__x, __y); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -846,6 +900,7 @@ namespace tr1 nexttoward(_Tp __x, long double __y) { return __builtin_nexttoward(__x, __y); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float remainder(float __x, float __y) { return __builtin_remainderf(__x, __y); } @@ -853,6 +908,7 @@ namespace tr1 inline long double remainder(long double __x, long double __y) { return __builtin_remainderl(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -862,6 +918,7 @@ namespace tr1 return remainder(__type(__x), __type(__y)); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float remquo(float __x, float __y, int* __pquo) { return __builtin_remquof(__x, __y, __pquo); } @@ -869,6 +926,7 @@ namespace tr1 inline long double remquo(long double __x, long double __y, int* __pquo) { return __builtin_remquol(__x, __y, __pquo); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type @@ -878,6 +936,7 @@ namespace tr1 return remquo(__type(__x), __type(__y), __pquo); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float rint(float __x) { return __builtin_rintf(__x); } @@ -885,6 +944,7 @@ namespace tr1 inline long double rint(long double __x) { return __builtin_rintl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -892,6 +952,7 @@ namespace tr1 rint(_Tp __x) { return __builtin_rint(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float round(float __x) { return __builtin_roundf(__x); } @@ -899,6 +960,7 @@ namespace tr1 inline long double round(long double __x) { return __builtin_roundl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -906,6 +968,7 @@ namespace tr1 round(_Tp __x) { return __builtin_round(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float scalbln(float __x, long __ex) { return __builtin_scalblnf(__x, __ex); } @@ -913,6 +976,7 @@ namespace tr1 inline long double scalbln(long double __x, long __ex) { return __builtin_scalblnl(__x, __ex); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -920,6 +984,7 @@ namespace tr1 scalbln(_Tp __x, long __ex) { return __builtin_scalbln(__x, __ex); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float scalbn(float __x, int __ex) { return __builtin_scalbnf(__x, __ex); } @@ -927,6 +992,7 @@ namespace tr1 inline long double scalbn(long double __x, int __ex) { return __builtin_scalbnl(__x, __ex); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -940,6 +1006,7 @@ namespace tr1 using std::tan; using std::tanh; +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float tgamma(float __x) { return __builtin_tgammaf(__x); } @@ -947,6 +1014,7 @@ namespace tr1 inline long double tgamma(long double __x) { return __builtin_tgammal(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -954,6 +1022,7 @@ namespace tr1 tgamma(_Tp __x) { return __builtin_tgamma(__x); } +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float trunc(float __x) { return __builtin_truncf(__x); } @@ -961,6 +1030,7 @@ namespace tr1 inline long double trunc(long double __x) { return __builtin_truncl(__x); } +#endif template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, @@ -994,6 +1064,7 @@ namespace tr1 // the discussion about this issue here: // http://gcc.gnu.org/ml/gcc-patches/2012-09/msg01278.html +#ifndef __CORRECT_ISO_CPP11_MATH_H_PROTO inline float pow(float __x, float __y) { return std::pow(__x, __y); } @@ -1001,6 +1072,7 @@ namespace tr1 inline long double pow(long double __x, long double __y) { return std::pow(__x, __y); } +#endif template<typename _Tp, typename _Up> inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type diff --git a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc --- a/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc +++ b/libstdc++-v3/testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc @@ -20,7 +20,7 @@ // { dg-do compile } // { dg-add-options no_pch } -// { dg-xfail-if "" { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.1[0-9]* hppa*-*-hpux* *-*-mingw* } || { uclibc || newlib } } { "*" } { "" } } +// { dg-xfail-if "" { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.10* hppa*-*-hpux* *-*-mingw* } || { uclibc || newlib } } { "*" } { "" } } // { dg-excess-errors "" { target { { *-*-linux* *-*-gnu* *-*-darwin* *-*-solaris2.1[0-9]* hppa*-*-hpux* *-*-mingw* } || { uclibc || newlib } } } } #include <math.h>
-- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University