Paul Eggert wrote: > > Solaris 10: isnan() is a function, defined in libc > > Not that this affects the conclusion, but the Solaris isnan is present > only for legacy apps. On Solaris 10 isnan is a macro that expands to > __builtin_isnan, and __builtin_isnan is done inline.
Huh? On a Solaris 10 / SPARC system I have this in /usr/include: $ grep isnan *.h ieeefp.h:extern int isnanf(float); ieeefp.h:extern int isnand(double); ieeefp.h:extern int isnand(); ieeefp.h:#define isnanf(x) (((*(long *)&(x) & 0x7f800000L) == 0x7f800000L) && \ math.h:extern int isnan __P((double)); math.h:#pragma does_not_read_global_data(isnan) math.h:#pragma does_not_write_global_data(isnan) math.h:#pragma no_side_effect(isnan) math.h:extern int isnanf __P((float)); math.h:extern int isnanl __P((long double)); math.h:#pragma does_not_read_global_data(isnanf, isnanl) math.h:#pragma does_not_write_global_data(isnanf, isnanl) math.h:#pragma no_side_effect(isnanf, isnanl) No trace of __builtin_isnan. Where does your isnan macro come from? From the GCC fixincludes? Bruno