https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57496
Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|fortran |libfortran --- Comment #7 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> --- (In reply to Francois-Xavier Coudert from comment #6) > Also, I don't understand how Tobias' patch worked, because in libgfortran.h > we have for a long time redefined all the type-generic floating-point macros > in terms of "safe to use" GCC builtins In fact, I can actually reverse the patch and the testcase does not fail. Index: io/write_float.def =================================================================== --- io/write_float.def (revision 226894) +++ io/write_float.def (working copy) @@ -958,33 +958,6 @@ __qmath_(quadmath_snprintf) (buffer, siz #endif -#if defined(GFC_REAL_16_IS_FLOAT128) -#define ISFINITE2Q(val) finiteq(val) -#endif -#define ISFINITE2(val) isfinite(val) -#define ISFINITE2L(val) isfinite(val) - -#define ISFINITE(suff,val) TOKENPASTE(ISFINITE2,suff)(val) - - -#if defined(GFC_REAL_16_IS_FLOAT128) -#define SIGNBIT2Q(val) signbitq(val) -#endif -#define SIGNBIT2(val) signbit(val) -#define SIGNBIT2L(val) signbit(val) - -#define SIGNBIT(suff,val) TOKENPASTE(SIGNBIT2,suff)(val) - - -#if defined(GFC_REAL_16_IS_FLOAT128) -#define ISNAN2Q(val) isnanq(val) -#endif -#define ISNAN2(val) isnan(val) -#define ISNAN2L(val) isnan(val) - -#define ISNAN(suff,val) TOKENPASTE(ISNAN2,suff)(val) - - /* Generate corresponding I/O format for FMT_G and output. The rules to translate FMT_G to FMT_E or FMT_F from DEC fortran @@ -1164,7 +1137,7 @@ OUTPUT_FLOAT_FMT_G(16,L) {\ volatile GFC_REAL_ ## x tmp, one = 1.0;\ tmp = * (GFC_REAL_ ## x *)source;\ - if (ISFINITE (y,tmp))\ + if (isfinite (tmp))\ {\ nprinted = DTOA(y,0,tmp);\ int e = atoi (&buffer[4]);\ @@ -1235,10 +1208,10 @@ determine_en_precision (st_parameter_dt {\ GFC_REAL_ ## x tmp;\ tmp = * (GFC_REAL_ ## x *)source;\ - sign_bit = SIGNBIT (y,tmp);\ - if (!ISFINITE (y,tmp))\ + sign_bit = signbit (tmp);\ + if (!isfinite (tmp))\ { \ - write_infnan (dtp, f, ISNAN (y,tmp), sign_bit);\ + write_infnan (dtp, f, isnan (tmp), sign_bit);\ return;\ }\ tmp = sign_bit ? -tmp : tmp;\