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;\