Kaveh R. Ghazi wrote:

Okay, thanks both of you for tracking this down.
So the solaris definition of isinf is not exception-safe in the presence 
of nans.  Try inserting this code into c99-math-double-1.c after it 
includes math headers.  (This is what fixincludes puts into the header 
for solaris 10).  See if it helps:
#undef isinf
#define isinf(x) __extension__ ({ const __typeof (x) __x_i = (x); \
__builtin_expect(sizeof(__x_i) == sizeof(float) \
 ? isgreater(__builtin_fabsf(__x_i),__FLT_MAX__) \
   : sizeof(__x_i) == sizeof(long double) \
   ? isgreater(__builtin_fabsl(__x_i),__LDBL_MAX__) \
     : isgreater(__builtin_fabs(__x_i),__DBL_MAX__), 0); })

It may pass isinf, but fail on a later if-abort. But hopefully this is the only broken bit in that header on solaris.
[ultra10:gcc/gcc/testsuite] andreast% svn diff gcc.dg/c99-math-double-1.c
Index: gcc.dg/c99-math-double-1.c
===================================================================
--- gcc.dg/c99-math-double-1.c  (revision 132096)
+++ gcc.dg/c99-math-double-1.c  (working copy)
@@ -3,6 +3,13 @@

 #include <math.h>
 #include "c99-math.h"
+#undef isinf
+#define isinf(x) __extension__ ({ const __typeof (x) __x_i = (x); \
+__builtin_expect(sizeof(__x_i) == sizeof(float) \
+ ? isgreater(__builtin_fabsf(__x_i),__FLT_MAX__) \
+   : sizeof(__x_i) == sizeof(long double) \
+   ? isgreater(__builtin_fabsl(__x_i),__LDBL_MAX__) \
+     : isgreater(__builtin_fabs(__x_i),__DBL_MAX__), 0); })

 int main(void)
 {

The test does complete w/o abort.

Also the other two tests complete (applied the above on them too).

gmake RUNTESTFLAGS='dg.exp=c99-math-*' check

                === gcc Summary ===

# of expected passes            6


Thanks,
Andreas

Reply via email to