On Tue, Jan 25, 2022 at 09:05:55AM +0100, FX wrote: > Hi Steve, > > > New signaling NaN causes 12 testsuite failures > > Thanks for alerting me. > > > Line 42 of signal_1.f90 looks wrong unless the > > line is testing conversion on assignment. Should > > y be x? > > Indeed. Fixed: > https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=c0a4a658097c56fa03d04b8d15c3ea02961d62a4 >
Thanks. > > Got the following in testsuite/gfortran/gfortran.log > > > > NaN 7FFFA000000000000000 > > NaN 7FFFC000000000000000 > > NaN 7FFFA000000000000000 > > > > and with "stop 300" commented out everything passes. Now to > > chase down hex representations for sNaN and qNaN. Suspect > > ieee_class() is broken. > > How does the long double formation look like on x86_64-unknown-freebsd? Ugh. I'm afraid that this might be a mess. > That test passes on x86_64 for linux and darwin, so I’m wondering > what’s different about freebsd… > > Can you tell me whether the C front-end defines __LDBL_IS_IEC_60559__? > What is the value of __LDBL_DIG__? __DBL_DIG__? > __FLOAT_WORD_ORDER == __BIG_ENDIAN or __LITTLE_ENDIAN? > % cat a.c #include <stdio.h> int main(void) { #ifdef __LDBL_IS_IEC_60559__ printf("__LDBL_IS_IEC_60559__? yes\n"); #else printf("__LDBL_IS_IEC_60559__? no\n"); #endif return 0; }; % gcc11 -o z a.c && ./z <-- initial bootstrap compiler __LDBL_IS_IEC_60559__? yes % cc -o z a.c && ./z <-- clang/llvm FreeBSD system compiler __LDBL_IS_IEC_60559__? no % ~/work/x/bin/gcc -o z a.c && ./z <-- gcc build from origin/master __LDBL_IS_IEC_60559__? yes There might be some strange interaction between FreeBSD native toolchain binaries and the binaries I build duringi bootstrap. The LDBL info from /usr/include/x86/float is #define LDBL_MANT_DIG 64 #define LDBL_EPSILON 1.0842021724855044340E-19L #define LDBL_DIG 18 #define LDBL_MIN_EXP (-16381) #define LDBL_MIN 3.3621031431120935063E-4932L #define LDBL_MIN_10_EXP (-4931) #define LDBL_MAX_EXP 16384 #define LDBL_MAX 1.1897314953572317650E+4932L #define LDBL_MAX_10_EXP 4932 #if __ISO_C_VISIBLE >= 2011 #define LDBL_TRUE_MIN 3.6451995318824746025E-4951L #define LDBL_DECIMAL_DIG 21 #define LDBL_HAS_SUBNORM 1 #endif /* __ISO_C_VISIBLE >= 2011 */ which is what I expect. How this maps to the __LDBL_DIG__ info, I do not know. % grep -R __LDBL_DIG__ /usr/include /usr/include/c++/v1/limits: static _LIBCPP_CONSTEXPR const int digits10 = __LDBL_DIG__; % grep -R __FLOAT_WORD_ORDER /usr/include Returns no hits, but I see % grep -R __BIG_ENDIAN /usr/include /usr/include/c++/v1/__config:#ifdef __BIG_ENDIAN__ /usr/include/c++/v1/__config:# if __BIG_ENDIAN__ /usr/include/c++/v1/__config:# endif // __BIG_ENDIAN__ /usr/include/c++/v1/__config:#endif // __BIG_ENDIAN__ /usr/include/c++/v1/__config:# elif __BYTE_ORDER == __BIG_ENDIAN /usr/include/c++/v1/__config:# else // __BYTE_ORDER == __BIG_ENDIAN So, maybe __BYTE_ORDER instead of __FLOAT_WORD_ORDER? -- Steve