diff options
| -rw-r--r-- | package/mpfr/mpfr-3.0.1_p4.patch | 367 | 
1 files changed, 367 insertions, 0 deletions
| diff --git a/package/mpfr/mpfr-3.0.1_p4.patch b/package/mpfr/mpfr-3.0.1_p4.patch new file mode 100644 index 000000000..9604635a2 --- /dev/null +++ b/package/mpfr/mpfr-3.0.1_p4.patch @@ -0,0 +1,367 @@ +diff -Naurd mpfr-3.0.1-a/PATCHES mpfr-3.0.1-b/PATCHES +--- mpfr-3.0.1-a/PATCHES	2011-04-12 10:50:02.000000000 +0000 ++++ mpfr-3.0.1-b/PATCHES	2011-04-12 10:50:02.000000000 +0000 +@@ -0,0 +1 @@ ++asin_exprange +diff -Naurd mpfr-3.0.1-a/VERSION mpfr-3.0.1-b/VERSION +--- mpfr-3.0.1-a/VERSION	2011-04-04 10:19:18.000000000 +0000 ++++ mpfr-3.0.1-b/VERSION	2011-04-12 10:50:02.000000000 +0000 +@@ -1 +1 @@ +-3.0.1 ++3.0.1-p1 +diff -Naurd mpfr-3.0.1-a/asin.c mpfr-3.0.1-b/asin.c +--- mpfr-3.0.1-a/asin.c	2011-04-04 10:19:18.000000000 +0000 ++++ mpfr-3.0.1-b/asin.c	2011-04-12 10:50:02.000000000 +0000 +@@ -63,11 +63,14 @@ +  +   compared = mpfr_cmp_ui (xp, 1); +  ++  MPFR_SAVE_EXPO_MARK (expo); ++ +   if (MPFR_UNLIKELY (compared >= 0)) +     { +       mpfr_clear (xp); +       if (compared > 0)                  /* asin(x) = NaN for |x| > 1 */ +         { ++          MPFR_SAVE_EXPO_FREE (expo); +           MPFR_SET_NAN (asin); +           MPFR_RET_NAN; +         } +@@ -80,13 +83,11 @@ +               inexact = -mpfr_const_pi (asin, MPFR_INVERT_RND(rnd_mode)); +               MPFR_CHANGE_SIGN (asin); +             } +-          mpfr_div_2ui (asin, asin, 1, rnd_mode); /* May underflow */ +-          return inexact; ++          mpfr_div_2ui (asin, asin, 1, rnd_mode); +         } +     } +- +-  MPFR_SAVE_EXPO_MARK (expo); +- ++  else ++    { +   /* Compute exponent of 1 - ABS(x) */ +   mpfr_ui_sub (xp, 1, xp, MPFR_RNDD); +   MPFR_ASSERTD (MPFR_GET_EXP (xp) <= 0); +@@ -115,6 +116,7 @@ +   inexact = mpfr_set (asin, xp, rnd_mode); +  +   mpfr_clear (xp); ++    } +  +   MPFR_SAVE_EXPO_FREE (expo); +   return mpfr_check_range (asin, inexact, rnd_mode); +diff -Naurd mpfr-3.0.1-a/mpfr.h mpfr-3.0.1-b/mpfr.h +--- mpfr-3.0.1-a/mpfr.h	2011-04-04 10:19:18.000000000 +0000 ++++ mpfr-3.0.1-b/mpfr.h	2011-04-12 10:50:02.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 0 + #define MPFR_VERSION_PATCHLEVEL 1 +-#define MPFR_VERSION_STRING "3.0.1" ++#define MPFR_VERSION_STRING "3.0.1-p1" +  + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.0.1-a/tests/tasin.c mpfr-3.0.1-b/tests/tasin.c +--- mpfr-3.0.1-a/tests/tasin.c	2011-04-04 10:19:17.000000000 +0000 ++++ mpfr-3.0.1-b/tests/tasin.c	2011-04-12 10:50:02.000000000 +0000 +@@ -219,6 +219,49 @@ +   mpfr_clear (y); + } +  ++static void ++reduced_expo_range (void) ++{ ++  mpfr_exp_t emin, emax; ++  mpfr_t x, y, ex_y; ++  int inex, ex_inex; ++  unsigned int flags, ex_flags; ++ ++  emin = mpfr_get_emin (); ++  emax = mpfr_get_emax (); ++ ++  mpfr_inits2 (4, x, y, ex_y, (mpfr_ptr) 0); ++  mpfr_set_str (x, "-0.1e1", 2, MPFR_RNDN); ++ ++  mpfr_set_emin (1); ++  mpfr_set_emax (1); ++  mpfr_clear_flags (); ++  inex = mpfr_asin (y, x, MPFR_RNDA); ++  flags = __gmpfr_flags; ++  mpfr_set_emin (emin); ++  mpfr_set_emax (emax); ++ ++  mpfr_set_str (ex_y, "-0.1101e1", 2, MPFR_RNDN); ++  ex_inex = -1; ++  ex_flags = MPFR_FLAGS_INEXACT; ++ ++  if (SIGN (inex) != ex_inex || flags != ex_flags || ++      ! mpfr_equal_p (y, ex_y)) ++    { ++      printf ("Error in reduced_expo_range\non x = "); ++      mpfr_dump (x); ++      printf ("Expected y = "); ++      mpfr_out_str (stdout, 2, 0, ex_y, MPFR_RNDN); ++      printf ("\n         inex = %d, flags = %u\n", ex_inex, ex_flags); ++      printf ("Got      y = "); ++      mpfr_out_str (stdout, 2, 0, y, MPFR_RNDN); ++      printf ("\n         inex = %d, flags = %u\n", SIGN (inex), flags); ++      exit (1); ++    } ++ ++  mpfr_clears (x, y, ex_y, (mpfr_ptr) 0); ++} ++ + int + main (void) + { +@@ -226,6 +269,7 @@ +  +   special (); +   special_overflow (); ++  reduced_expo_range (); +  +   test_generic (2, 100, 15); +  +diff -Naurd mpfr-3.0.1-a/version.c mpfr-3.0.1-b/version.c +--- mpfr-3.0.1-a/version.c	2011-04-04 10:19:18.000000000 +0000 ++++ mpfr-3.0.1-b/version.c	2011-04-12 10:50:02.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +-  return "3.0.1"; ++  return "3.0.1-p1"; + } +diff -Naurd mpfr-3.0.1-a/PATCHES mpfr-3.0.1-b/PATCHES +--- mpfr-3.0.1-a/PATCHES	2011-05-04 11:18:33.000000000 +0000 ++++ mpfr-3.0.1-b/PATCHES	2011-05-04 11:18:33.000000000 +0000 +@@ -0,0 +1 @@ ++rec_sqrt-carry +diff -Naurd mpfr-3.0.1-a/VERSION mpfr-3.0.1-b/VERSION +--- mpfr-3.0.1-a/VERSION	2011-04-12 10:50:02.000000000 +0000 ++++ mpfr-3.0.1-b/VERSION	2011-05-04 11:18:33.000000000 +0000 +@@ -1 +1 @@ +-3.0.1-p1 ++3.0.1-p2 +diff -Naurd mpfr-3.0.1-a/mpfr.h mpfr-3.0.1-b/mpfr.h +--- mpfr-3.0.1-a/mpfr.h	2011-04-12 10:50:02.000000000 +0000 ++++ mpfr-3.0.1-b/mpfr.h	2011-05-04 11:18:33.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 0 + #define MPFR_VERSION_PATCHLEVEL 1 +-#define MPFR_VERSION_STRING "3.0.1-p1" ++#define MPFR_VERSION_STRING "3.0.1-p2" +  + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.0.1-a/rec_sqrt.c mpfr-3.0.1-b/rec_sqrt.c +--- mpfr-3.0.1-a/rec_sqrt.c	2011-04-04 10:19:18.000000000 +0000 ++++ mpfr-3.0.1-b/rec_sqrt.c	2011-05-04 11:18:33.000000000 +0000 +@@ -375,20 +375,37 @@ +       MPFR_ASSERTD(un == ln + 1 || un == ln + 2); +       /* the high un-ln limbs of u will overlap the low part of {x+ln,xn}, +          we need to add or subtract the overlapping part {u + ln, un - ln} */ ++      /* Warning! th may be 0, in which case the mpn_add_1 and mpn_sub_1 ++         below (with size = th) mustn't be used. In such a case, the limb ++         (carry) will be 0, so that this is semantically a no-op, but if ++         mpn_add_1 and mpn_sub_1 are used, GMP (currently) still does a ++         non-atomic read/write in a place that is not always allocated, ++         with the possible consequences: a crash if the corresponding ++         address is not mapped, or (rather unlikely) memory corruption ++         if another process/thread writes at the same place; things may ++         be worse with future GMP versions. Hence the tests carry != 0. */ +       if (neg == 0) +         { +           if (ln > 0) +             MPN_COPY (x, u, ln); +           cy = mpn_add (x + ln, x + ln, xn, u + ln, un - ln); +           /* add cu at x+un */ +-          cy += mpn_add_1 (x + un, x + un, th, cu); ++          if (cu != 0) ++            { ++              MPFR_ASSERTD (th != 0); ++              cy += mpn_add_1 (x + un, x + un, th, cu); ++            } +         } +       else /* negative case */ +         { +           /* subtract {u+ln, un-ln} from {x+ln,un} */ +           cy = mpn_sub (x + ln, x + ln, xn, u + ln, un - ln); +           /* carry cy is at x+un, like cu */ +-          cy = mpn_sub_1 (x + un, x + un, th, cy + cu); /* n - un = th */ ++          if (cy + cu != 0) ++            { ++              MPFR_ASSERTD (th != 0); ++              cy = mpn_sub_1 (x + un, x + un, th, cy + cu); /* n - un = th */ ++            } +           /* cy cannot be zero, since the most significant bit of Xh is 1, +              and the correction is bounded by 2^{-h+3} */ +           MPFR_ASSERTD(cy == 0); +diff -Naurd mpfr-3.0.1-a/version.c mpfr-3.0.1-b/version.c +--- mpfr-3.0.1-a/version.c	2011-04-12 10:50:02.000000000 +0000 ++++ mpfr-3.0.1-b/version.c	2011-05-04 11:18:33.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +-  return "3.0.1-p1"; ++  return "3.0.1-p2"; + } +diff -Naurd mpfr-3.0.1-a/PATCHES mpfr-3.0.1-b/PATCHES +--- mpfr-3.0.1-a/PATCHES	2011-05-05 00:00:35.000000000 +0000 ++++ mpfr-3.0.1-b/PATCHES	2011-05-05 00:00:35.000000000 +0000 +@@ -0,0 +1 @@ ++atan-expo-range +diff -Naurd mpfr-3.0.1-a/VERSION mpfr-3.0.1-b/VERSION +--- mpfr-3.0.1-a/VERSION	2011-05-04 11:18:33.000000000 +0000 ++++ mpfr-3.0.1-b/VERSION	2011-05-05 00:00:35.000000000 +0000 +@@ -1 +1 @@ +-3.0.1-p2 ++3.0.1-p3 +diff -Naurd mpfr-3.0.1-a/atan.c mpfr-3.0.1-b/atan.c +--- mpfr-3.0.1-a/atan.c	2011-04-04 10:19:18.000000000 +0000 ++++ mpfr-3.0.1-b/atan.c	2011-05-05 00:00:35.000000000 +0000 +@@ -431,5 +431,5 @@ +   MPFR_GROUP_CLEAR (group); +  +   MPFR_SAVE_EXPO_FREE (expo); +-  return mpfr_check_range (arctgt, inexact, rnd_mode); ++  return mpfr_check_range (atan, inexact, rnd_mode); + } +diff -Naurd mpfr-3.0.1-a/mpfr.h mpfr-3.0.1-b/mpfr.h +--- mpfr-3.0.1-a/mpfr.h	2011-05-04 11:18:33.000000000 +0000 ++++ mpfr-3.0.1-b/mpfr.h	2011-05-05 00:00:35.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 0 + #define MPFR_VERSION_PATCHLEVEL 1 +-#define MPFR_VERSION_STRING "3.0.1-p2" ++#define MPFR_VERSION_STRING "3.0.1-p3" +  + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.0.1-a/tests/tatan.c mpfr-3.0.1-b/tests/tatan.c +--- mpfr-3.0.1-a/tests/tatan.c	2011-04-04 10:19:17.000000000 +0000 ++++ mpfr-3.0.1-b/tests/tatan.c	2011-05-05 00:00:35.000000000 +0000 +@@ -535,6 +535,52 @@ +   mpfr_clears (a, x, y, (mpfr_ptr) 0); + } +  ++/* http://websympa.loria.fr/wwsympa/arc/mpfr/2011-05/msg00008.html ++ * Incorrect flags (in debug mode on a 32-bit machine, assertion failure). ++ */ ++static void ++reduced_expo_range (void) ++{ ++  mpfr_exp_t emin, emax; ++  mpfr_t x, y, ex_y; ++  int inex, ex_inex; ++  unsigned int flags, ex_flags; ++ ++  emin = mpfr_get_emin (); ++  emax = mpfr_get_emax (); ++ ++  mpfr_inits2 (12, x, y, ex_y, (mpfr_ptr) 0); ++  mpfr_set_str (x, "0.1e-5", 2, MPFR_RNDN); ++ ++  mpfr_set_emin (-5); ++  mpfr_set_emax (-5); ++  mpfr_clear_flags (); ++  inex = mpfr_atan (y, x, MPFR_RNDN); ++  flags = __gmpfr_flags; ++  mpfr_set_emin (emin); ++  mpfr_set_emax (emax); ++ ++  mpfr_set_str (ex_y, "0.1e-5", 2, MPFR_RNDN); ++  ex_inex = 1; ++  ex_flags = MPFR_FLAGS_INEXACT; ++ ++  if (SIGN (inex) != ex_inex || flags != ex_flags || ++      ! mpfr_equal_p (y, ex_y)) ++    { ++      printf ("Error in reduced_expo_range\non x = "); ++      mpfr_dump (x); ++      printf ("Expected y = "); ++      mpfr_out_str (stdout, 2, 0, ex_y, MPFR_RNDN); ++      printf ("\n         inex = %d, flags = %u\n", ex_inex, ex_flags); ++      printf ("Got      y = "); ++      mpfr_out_str (stdout, 2, 0, y, MPFR_RNDN); ++      printf ("\n         inex = %d, flags = %u\n", SIGN (inex), flags); ++      exit (1); ++    } ++ ++  mpfr_clears (x, y, ex_y, (mpfr_ptr) 0); ++} ++ + int + main (int argc, char *argv[]) + { +@@ -546,6 +592,7 @@ +   smallvals_atan2 (); +   atan2_bug_20071003 (); +   atan2_different_prec (); ++  reduced_expo_range (); +  +   test_generic_atan  (2, 200, 17); +   test_generic_atan2 (2, 200, 17); +diff -Naurd mpfr-3.0.1-a/version.c mpfr-3.0.1-b/version.c +--- mpfr-3.0.1-a/version.c	2011-05-04 11:18:33.000000000 +0000 ++++ mpfr-3.0.1-b/version.c	2011-05-05 00:00:35.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +-  return "3.0.1-p2"; ++  return "3.0.1-p3"; + } +diff -Naurd mpfr-3.0.1-a/PATCHES mpfr-3.0.1-b/PATCHES +--- mpfr-3.0.1-a/PATCHES	2011-05-09 14:48:24.000000000 +0000 ++++ mpfr-3.0.1-b/PATCHES	2011-05-09 14:48:24.000000000 +0000 +@@ -0,0 +1 @@ ++texp-zero +diff -Naurd mpfr-3.0.1-a/VERSION mpfr-3.0.1-b/VERSION +--- mpfr-3.0.1-a/VERSION	2011-05-05 00:00:35.000000000 +0000 ++++ mpfr-3.0.1-b/VERSION	2011-05-09 14:48:24.000000000 +0000 +@@ -1 +1 @@ +-3.0.1-p3 ++3.0.1-p4 +diff -Naurd mpfr-3.0.1-a/mpfr.h mpfr-3.0.1-b/mpfr.h +--- mpfr-3.0.1-a/mpfr.h	2011-05-05 00:00:35.000000000 +0000 ++++ mpfr-3.0.1-b/mpfr.h	2011-05-09 14:48:24.000000000 +0000 +@@ -27,7 +27,7 @@ + #define MPFR_VERSION_MAJOR 3 + #define MPFR_VERSION_MINOR 0 + #define MPFR_VERSION_PATCHLEVEL 1 +-#define MPFR_VERSION_STRING "3.0.1-p3" ++#define MPFR_VERSION_STRING "3.0.1-p4" +  + /* Macros dealing with MPFR VERSION */ + #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c)) +diff -Naurd mpfr-3.0.1-a/tests/texp.c mpfr-3.0.1-b/tests/texp.c +--- mpfr-3.0.1-a/tests/texp.c	2011-04-04 10:19:17.000000000 +0000 ++++ mpfr-3.0.1-b/tests/texp.c	2011-05-09 14:48:24.000000000 +0000 +@@ -170,7 +170,9 @@ +       mpfr_set_prec (x, prec); +       mpfr_set_prec (y, prec); +       mpfr_set_prec (z, prec); +-      mpfr_urandomb (x, RANDS); ++      do ++        mpfr_urandomb (x, RANDS); ++      while (MPFR_IS_ZERO (x));  /* 0 is handled by mpfr_exp only */ +       rnd = RND_RAND (); +       mpfr_exp_2 (y, x, rnd); +       mpfr_exp_3 (z, x, rnd); +diff -Naurd mpfr-3.0.1-a/version.c mpfr-3.0.1-b/version.c +--- mpfr-3.0.1-a/version.c	2011-05-05 00:00:35.000000000 +0000 ++++ mpfr-3.0.1-b/version.c	2011-05-09 14:48:24.000000000 +0000 +@@ -25,5 +25,5 @@ + const char * + mpfr_get_version (void) + { +-  return "3.0.1-p3"; ++  return "3.0.1-p4"; + } | 
