http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49813
--- Comment #12 from rguenther at suse dot de <rguenther at suse dot de> 2011-07-22 11:20:52 UTC --- On Fri, 22 Jul 2011, rguenther at suse dot de wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49813 > > --- Comment #10 from rguenther at suse dot de <rguenther at suse dot de> > 2011-07-22 11:17:38 UTC --- > On Fri, 22 Jul 2011, paolo.carlini at oracle dot com wrote: > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49813 > > > > --- Comment #9 from Paolo Carlini <paolo.carlini at oracle dot com> > > 2011-07-22 11:09:55 UTC --- > > Yes, Vincenzo, all the other C99-only functions should be audited. I > > suppose a > > clean fix will automatically deal with all of them. > > Looking at -original it seems that libstdc++ lacks C99 overloads for > double - it has them for float and long double only. > > Or that > > inline float > asinh(float __x) > { return __builtin_asinhf(__x); } > > inline long double > asinh(long double __x) > { return __builtin_asinhl(__x); } > > template<typename _Tp> > inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, > double>::__type > asinh(_Tp __x) > { return __builtin_asinh(__x); } > > isn't constexpr compatible. > > Doesn't sound like a middle-end issue but either a library or frontend > issue to me. > > That said, it works fine if you give a asinh declaration in the > testcase. Btw, asinh is template<typename _Tp> inline typename __gnu_cxx::__promote<_Tp>::__type asinh(_Tp __x) { typedef typename __gnu_cxx::__promote<_Tp>::__type __type; return asinh(__type(__x)); } vs. sinh which is template<typename _Tp> inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, double>::__type sinh(_Tp __x) { return __builtin_sinh(__x); } note the lack of __gnu_cxx::__promote