https://gcc.gnu.org/bugzilla/show_bug.cgi?id=20432
Thomas Koenig <tkoenig at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed|2008-12-11 21:22:46 |2016-8-30
CC| |tkoenig at gcc dot gnu.org
--- Comment #6 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Still an issue:
#include <math.h>
#include <complex.h>
int main()
{
float complex c,d;
foo(&c);
d=1.0f/c;
return creal(d)+cimag(d)<0;
}
Using -fcx-fortran-rules yields (from the optimized dump)
_13 = REALPART_EXPR <c>;
_14 = IMAGPART_EXPR <c>;
_15 = ABS_EXPR <_13>;
_16 = ABS_EXPR <_14>;
if (_15 < _16)
goto <bb 3>;
else
goto <bb 4>;
<bb 3>:
_18 = _13 / _14;
_19 = _13 * _18;
_20 = _14 + _19;
_21 = _18 + 0.0;
_22 = _18 * 0.0;
_23 = _22 - 1.0e+0;
_24 = _21 / _20;
_25 = _23 / _20;
goto <bb 5>;
<bb 4>:
_26 = _14 / _13;
_27 = _14 * _26;
_28 = _13 + _27;
_29 = _26 * 0.0;
_30 = _29 + 1.0e+0;
_31 = 0.0 - _26;
_32 = _30 / _28;
_33 = _31 / _28;
I do not think it is possible to create a NaN/Inf situation here
where just ignoring the imaginary zero is wrong.