components/stdcxx/patches/032-NO_DBL_TRAPS.cpp.patch
changeset 402 94ae4d75524c
equal deleted inserted replaced
401:bf52ef48020c 402:94ae4d75524c
       
     1 --- stdcxx-4.2.1/etc/config/src/NO_DBL_TRAPS.cpp	2008-04-24 20:25:44.000000000 -0400
       
     2 +++ stdcxx-4.2.1/etc/config/src/NO_DBL_TRAPS.cpp	2011-01-12 22:13:06.534845500 -0500
       
     3 @@ -39,6 +39,11 @@
       
     4  
       
     5  #include "nodbg.h"
       
     6  
       
     7 +#if defined(__SUNPRO_CC)
       
     8 +#include <sys/types.h>
       
     9 +#include <signal.h>
       
    10 +#endif
       
    11 +
       
    12  double dbl_get_zero ();
       
    13  double dbl_get_one ();
       
    14  
       
    15 @@ -56,33 +61,39 @@
       
    16      dbl_inf = dbl_one / dbl_zero;
       
    17  
       
    18      // computation involving infinities that might trap
       
    19 -    dbl_nan = dbl_zero * dbl_inf;    // #3
       
    20      dbl_nan = dbl_zero / dbl_zero;   // #4a
       
    21 -    dbl_nan = dbl_inf / dbl_inf;     // #4b
       
    22 -    dbl_nan = dbl_inf - dbl_inf;     // #5
       
    23  
       
    24      if (argc > 2)
       
    25 -        return dbl_nan;
       
    26 +        return -dbl_nan;
       
    27  
       
    28      if (argc > 1)
       
    29          return dbl_inf;
       
    30  
       
    31 +#if defined(__SUNPRO_CC)
       
    32 +#if defined((sun) || defined(__sun) || defined(__sun__)
       
    33 +    kill(getpid(), SIGFPE);
       
    34 +#elif defined(linux) || defined(__linux) || defined(__linux__)
       
    35 +	return 136;
       
    36 +#endif
       
    37 +#else
       
    38      // NEGATIVE test: successful exit status indicates a failure
       
    39      return 0;
       
    40 +#endif
       
    41  }
       
    42  
       
    43  // foil optimizers
       
    44  double dbl_get_zero ()
       
    45  {
       
    46 -    static double value = 0.0;
       
    47 +    static double zero = 0.0;
       
    48  
       
    49 -    return value;
       
    50 +    return zero;
       
    51  }
       
    52  
       
    53  
       
    54  double dbl_get_one ()
       
    55  {
       
    56 -    static double value = 1.0;
       
    57 +    static double one = 1.0;
       
    58  
       
    59 -    return value;
       
    60 +    return one;
       
    61  }
       
    62 +