> Found it. https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html > > Add trailing undersores to __FLOAT_WORD_ORDER and change > __BIG_ENDIAN to __ORDER_BIG_ENDIAN__. Likewise for LITTLE.
Thanks Steve! What I wonder is: if those conditions failed, then the struct they define should have been empty, and therefore the code shouldn’t compile anyway (that was the intent). Does the attached patch fix the remaining failures? FX
commit 03cfe155f46c05e4dda349be2abe467c16789491 Author: Francois-Xavier Coudert <fxcoud...@gmail.com> Date: 2022-01-25 21:54:03 +0100 Fortran: fix issignaling() implementation libgfortran/ChangeLog: * ieee/issignaling_fallback.h: Fix GCC-specific preprocessor macros. diff --git a/libgfortran/ieee/issignaling_fallback.h b/libgfortran/ieee/issignaling_fallback.h index 4632bc510f7..fc59481c43b 100644 --- a/libgfortran/ieee/issignaling_fallback.h +++ b/libgfortran/ieee/issignaling_fallback.h @@ -103,12 +103,12 @@ typedef union long double value; struct { -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN +#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ int sign_exponent:16; unsigned int empty:16; uint32_t msw; uint32_t lsw; -#elif __FLOAT_WORD_ORDER == __LITTLE_ENDIAN +#elif __FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__ uint32_t lsw; uint32_t msw; int sign_exponent:16; @@ -146,10 +146,10 @@ typedef union long double value; struct { -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN +#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ uint64_t msw; uint64_t lsw; -#elif __FLOAT_WORD_ORDER == __LITTLE_ENDIAN +#elif __FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__ uint64_t lsw; uint64_t msw; #endif @@ -191,10 +191,10 @@ typedef union __float128 value; struct { -#if __FLOAT_WORD_ORDER == __BIG_ENDIAN +#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ uint64_t msw; uint64_t lsw; -#elif __FLOAT_WORD_ORDER == __LITTLE_ENDIAN +#elif __FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__ uint64_t lsw; uint64_t msw; #endif