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

Reply via email to