This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/49813] [C++0x] sinh vs asinh vs constexpr
- From: "rguenther at suse dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 22 Jul 2011 11:23:36 +0000
- Subject: [Bug c++/49813] [C++0x] sinh vs asinh vs constexpr
- Auto-submitted: auto-generated
- References: <bug-49813-4@http.gcc.gnu.org/bugzilla/>
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