This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/21797] complex(4) sqrt failures on alpha-linux
- From: "kargl at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 May 2005 14:39:19 -0000
- Subject: [Bug fortran/21797] complex(4) sqrt failures on alpha-linux
- References: <20050528095438.21797.fxcoudert@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From kargl at gcc dot gnu dot org 2005-05-28 14:39 -------
FX,
On i386-*-freebsd, -fdump-tree-original shows
MAIN__ ()
{
complex4 z;
complex4 c;
z = __complex__ (4.0e+0, 0.0);
c = csqrtf (z);
kargl[214] find . -type f | xargs grep csqrtf
./gcc/builtins.def:DEF_C99_BUILTIN (BUILT_IN_CSQRTF, "csqrtf",
BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
./gcc/doc/extend.texi:@findex csqrtf
./gcc/doc/extend.texi:@code{csinhl}, @code{csinh}, @code{csinl}, @code{csin},
@code{csqrtf},
./libstdc++-v3/ChangeLog-2000: (EXTRA_DIST): Remove csqrt.c and csqrtf.c.
./libstdc++-v3/acinclude.m4: csqrtf(tmpf);
./libstdc++-v3/configure: csqrtf(tmpf);
./libstdc++-v3/include/std/std_complex.h: __complex_sqrt(__complex__ float __z)
{ return __builtin_csqrtf(__z); }
./libstdc++-v3/ChangeLog-1998: * math/csqrtf.c: Likewise.
./libstdc++-v3/ChangeLog-1998: * math/csqrtf.c: Likewise.
./libstdc++-v3/ChangeLog-1999: * math/csqrtf.c: Likewise.
./libgfortran/generated/exp_c4.c:csqrtf (GFC_COMPLEX_4 z)
If we look through libgfortran/generated/exp_c4.c, we see that csqrtf
mixes float and double C math functions
if (im == 0.0)
{
if (re < 0.0)
{
COMPLEX_ASSIGN (v, 0.0, copysignf (sqrtf (-re), im));
}
else
{
COMPLEX_ASSIGN (v, fabsf (sqrt (re)),
copysignf (0.0, im));
}
}
Note the sqrt (re) instead of sqrtf (re).
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21797