[PATCH] libgfortran: Correct FP feature macro checks
Tobias Burnus
tobias@codesourcery.com
Wed Nov 25 18:17:27 GMT 2020
LGTM.
Does this solve all infinity issues? Or is there still code requiring it
implicitly? From the previous exchange, it sounded as if there are still
issues.
Tobias
On 25.11.20 19:14, Maciej W. Rozycki wrote:
> The *_HAS_* floating-point feature macros are defined as 0/1 rather than
> #undef/#define settings by gcc/c-family/c-cppbuiltin.c. Consequently we
> choose to use infinity and NaN features even with non-IEEE-754 targets
> such as `vax-netbsdelf' that lack them, causing build warnings and
> failures like:
>
> In file included from .../libgfortran/generated/maxval_r4.c:26:
> .../libgfortran/generated/maxval_r4.c: In function 'maxval_r4':
> .../libgfortran/libgfortran.h:292:30: warning: target format does not support infinity
> 292 | # define GFC_REAL_4_INFINITY __builtin_inff ()
> | ^~~~~~~~~~~~~~
> .../libgfortran/generated/maxval_r4.c:149:19:
> note: in expansion of macro 'GFC_REAL_4_INFINITY'
> 149 | result = -GFC_REAL_4_INFINITY;
> | ^~~~~~~~~~~~~~~~~~~
> .../libgfortran/generated/maxval_r4.c: In function 'mmaxval_r4':
> .../libgfortran/libgfortran.h:292:30: warning: target format does not support infinity
> 292 | # define GFC_REAL_4_INFINITY __builtin_inff ()
> | ^~~~~~~~~~~~~~
> .../libgfortran/generated/maxval_r4.c:363:19:
> note: in expansion of macro 'GFC_REAL_4_INFINITY'
> 363 | result = -GFC_REAL_4_INFINITY;
> | ^~~~~~~~~~~~~~~~~~~
> {standard input}: Assembler messages:
> {standard input}:204: Fatal error: Can't relocate expression
> make[3]: *** [Makefile:3358: maxval_r4.lo] Error 1
>
> Correct the checks then for __FLT_HAS_INFINITY__, __DBL_HAS_INFINITY__,
> __LDBL_HAS_INFINITY__, __FLT_HAS_QUIET_NAN__, __DBL_HAS_QUIET_NAN__, and
> __LDBL_HAS_QUIET_NAN__ to match semantics and remove build issues coming
> from the misinterpretation of these macros.
>
> libgfortran/
> * libgfortran.h: Use #if rather than #ifdef with
> __FLT_HAS_INFINITY__, __DBL_HAS_INFINITY__,
> __LDBL_HAS_INFINITY__, __FLT_HAS_QUIET_NAN__,
> __DBL_HAS_QUIET_NAN__, and __LDBL_HAS_QUIET_NAN__.
> ---
> libgfortran/libgfortran.h | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> gcc-libgfortran-fp-has.diff
> Index: gcc/libgfortran/libgfortran.h
> ===================================================================
> --- gcc.orig/libgfortran/libgfortran.h
> +++ gcc/libgfortran/libgfortran.h
> @@ -288,13 +288,13 @@ typedef GFC_UINTEGER_4 gfc_char4_t;
>
> /* M{IN,AX}{LOC,VAL} need also infinities and NaNs if supported. */
>
> -#ifdef __FLT_HAS_INFINITY__
> +#if __FLT_HAS_INFINITY__
> # define GFC_REAL_4_INFINITY __builtin_inff ()
> #endif
> -#ifdef __DBL_HAS_INFINITY__
> +#if __DBL_HAS_INFINITY__
> # define GFC_REAL_8_INFINITY __builtin_inf ()
> #endif
> -#ifdef __LDBL_HAS_INFINITY__
> +#if __LDBL_HAS_INFINITY__
> # ifdef HAVE_GFC_REAL_10
> # define GFC_REAL_10_INFINITY __builtin_infl ()
> # endif
> @@ -306,13 +306,13 @@ typedef GFC_UINTEGER_4 gfc_char4_t;
> # endif
> # endif
> #endif
> -#ifdef __FLT_HAS_QUIET_NAN__
> +#if __FLT_HAS_QUIET_NAN__
> # define GFC_REAL_4_QUIET_NAN __builtin_nanf ("")
> #endif
> -#ifdef __DBL_HAS_QUIET_NAN__
> +#if __DBL_HAS_QUIET_NAN__
> # define GFC_REAL_8_QUIET_NAN __builtin_nan ("")
> #endif
> -#ifdef __LDBL_HAS_QUIET_NAN__
> +#if __LDBL_HAS_QUIET_NAN__
> # ifdef HAVE_GFC_REAL_10
> # define GFC_REAL_10_QUIET_NAN __builtin_nanl ("")
> # endif
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
More information about the Fortran
mailing list