hot fixes for yosemite

Jack Howarth <[email protected]>
Newsgroups gmane.os.apple.fink.devel
Message-ID <CAP5Ds0CDv-EhJakKZ3hHm_NCZmW19R7EVUzccFmv4BV6t_8DAQ@mail.gmail.com>
David,
      We need to push out some hot fixes to repair breakage on Yosemite.
MacPorts is using patches to configure to address the inappropriate linkage
of shared libraries with...

-Wl,-flat_namespace -Wl,-undefined -Wl,suppress


instead of


-Wl,-undefined -Wl,dynamic_lookup


when MACOSX_DEPLOYMENT_TARGET is set to 10.10 as fink does by default.

The fix is always of the form...


diff -uNr mpfr-3.1.2.orig/configure mpfr-3.1.2/configure

--- mpfr-3.1.2.orig/configure   2013-03-13 11:38:20.000000000 -0400

+++ mpfr-3.1.2/configure        2014-10-26 01:00:37.000000000 -0400

@@ -10401,7 +10401,7 @@

       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in

        10.0,*86*-darwin8*|10.0,*-darwin[91]*)

          _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;

-       10.[012]*)

+       10.[012][,.]*)

          _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined
${wl}suppress' ;;

        10.*)

          _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;

diff -uNr mpfr-3.1.2.orig/m4/libtool.m4 mpfr-3.1.2/m4/libtool.m4

--- mpfr-3.1.2.orig/m4/libtool.m4       2013-03-13 11:38:16.000000000 -0400

+++ mpfr-3.1.2/m4/libtool.m4    2014-10-26 01:00:37.000000000 -0400

@@ -1052,7 +1052,7 @@

       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in

        10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)

          _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;

-       10.[[012]]*)

+       10.[[012]][[,.]]*)

          _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined
${wl}suppress' ;;

        10.*)

          _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;

     Without this hot-fix shared libraries are being linked as if the
target were Puma instead

of Yosemite. The issue is very wide spread as libtool needs to be updated
in all the

packages using it. It also can cause nasty side-effects as witnessed by the
large number

of gcc49 test suite regressions when linked in this way. I will push a fix
to gcc49-4.9.1 later

today.

      Attached is the fixes for libmpfr4 and gmp5. Note that I also added
the missing

upstream accumulative patches to take libmpfr to 3.1.2-P10.

                   Jack
l

------------------------------------------------------------------------------

_______________________________________________
Fink-devel mailing list
[email protected]
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel
libmpfr4.patch (application/octet-stream, 53.4 KB)
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/PATCHES	2013-09-26 10:52:52.000000000 +0000
@@ -0,0 +1 @@
+exp_2
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2013-03-13 15:37:28.000000000 +0000
+++ mpfr-3.1.2-b/VERSION	2013-09-26 10:52:52.000000000 +0000
@@ -1 +1 @@
-3.1.2
+3.1.2-p1
diff -Naurd mpfr-3.1.2-a/src/exp_2.c mpfr-3.1.2-b/src/exp_2.c
--- mpfr-3.1.2-a/src/exp_2.c	2013-03-13 15:37:28.000000000 +0000
+++ mpfr-3.1.2-b/src/exp_2.c	2013-09-26 10:52:52.000000000 +0000
@@ -204,7 +204,7 @@
           for (k = 0; k < K; k++)
             {
               mpz_mul (ss, ss, ss);
-              exps <<= 1;
+              exps *= 2;
               exps += mpz_normalize (ss, ss, q);
             }
           mpfr_set_z (s, ss, MPFR_RNDN);
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2013-03-13 15:37:37.000000000 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2013-09-26 10:52:52.000000000 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2"
+#define MPFR_VERSION_STRING "3.1.2-p1"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2013-03-13 15:37:34.000000000 +0000
+++ mpfr-3.1.2-b/src/version.c	2013-09-26 10:52:52.000000000 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2";
+  return "3.1.2-p1";
 }
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2013-09-26 10:56:55.000000000 +0000
+++ mpfr-3.1.2-b/PATCHES	2013-09-26 10:56:55.000000000 +0000
@@ -0,0 +1 @@
+fits-smallneg
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/VERSION	2013-09-26 10:56:55.000000000 +0000
@@ -1 +1 @@
-3.1.2-p1
+3.1.2-p2
diff -Naurd mpfr-3.1.2-a/src/fits_u.h mpfr-3.1.2-b/src/fits_u.h
--- mpfr-3.1.2-a/src/fits_u.h	2013-03-13 15:37:35.000000000 +0000
+++ mpfr-3.1.2-b/src/fits_u.h	2013-09-26 10:56:55.000000000 +0000
@@ -32,17 +32,20 @@
   int res;
 
   if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (f)))
-    /* Zero always fit */
-    return MPFR_IS_ZERO (f) ? 1 : 0;
-  else if (MPFR_IS_NEG (f))
-    /* Negative numbers don't fit */
-    return 0;
-  /* now it fits if
-     (a) f <= MAXIMUM
-     (b) round(f, prec(slong), rnd) <= MAXIMUM */
+    return MPFR_IS_ZERO (f) ? 1 : 0;  /* Zero always fits */
 
   e = MPFR_GET_EXP (f);
 
+  if (MPFR_IS_NEG (f))
+    return e >= 1 ? 0  /* f <= -1 does not fit */
+      : rnd != MPFR_RNDN ? MPFR_IS_LIKE_RNDU (rnd, -1)  /* directed mode */
+      : e < 0 ? 1  /* f > -1/2 fits in MPFR_RNDN */
+      : mpfr_powerof2_raw(f);  /* -1/2 fits, -1 < f < -1/2 don't */
+
+  /* Now it fits if
+     (a) f <= MAXIMUM
+     (b) round(f, prec(slong), rnd) <= MAXIMUM */
+
   /* first compute prec(MAXIMUM); fits in an int */
   for (s = MAXIMUM, prec = 0; s != 0; s /= 2, prec ++);
 
diff -Naurd mpfr-3.1.2-a/src/fits_uintmax.c mpfr-3.1.2-b/src/fits_uintmax.c
--- mpfr-3.1.2-a/src/fits_uintmax.c	2013-03-13 15:37:33.000000000 +0000
+++ mpfr-3.1.2-b/src/fits_uintmax.c	2013-09-26 10:56:55.000000000 +0000
@@ -27,51 +27,19 @@
 #include "mpfr-intmax.h"
 #include "mpfr-impl.h"
 
-#ifdef _MPFR_H_HAVE_INTMAX_T
-
-/* We can't use fits_u.h <= mpfr_cmp_ui */
-int
-mpfr_fits_uintmax_p (mpfr_srcptr f, mpfr_rnd_t rnd)
-{
-  mpfr_exp_t e;
-  int prec;
-  uintmax_t s;
-  mpfr_t x;
-  int res;
-
-  if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (f)))
-    /* Zero always fit */
-    return MPFR_IS_ZERO (f) ? 1 : 0;
-  else if (MPFR_IS_NEG (f))
-    /* Negative numbers don't fit */
-    return 0;
-  /* now it fits if
-     (a) f <= MAXIMUM
-     (b) round(f, prec(slong), rnd) <= MAXIMUM */
-
-  e = MPFR_GET_EXP (f);
-
-  /* first compute prec(MAXIMUM); fits in an int */
-  for (s = MPFR_UINTMAX_MAX, prec = 0; s != 0; s /= 2, prec ++);
-
-  /* MAXIMUM needs prec bits, i.e. MAXIMUM = 2^prec - 1 */
-
-  /* if e <= prec - 1, then f < 2^(prec-1) < MAXIMUM */
-  if (e <= prec - 1)
-    return 1;
+/* Note: though mpfr-impl.h is included in fits_u.h, we also include it
+   above so that it gets included even when _MPFR_H_HAVE_INTMAX_T is not
+   defined; this is necessary to avoid an empty translation unit, which
+   is forbidden by ISO C. Without this, a failing test can be reproduced
+   by creating an invalid stdint.h somewhere in the default include path
+   and by compiling MPFR with "gcc -ansi -pedantic-errors". */
 
-  /* if e >= prec + 1, then f >= 2^prec > MAXIMUM */
-  if (e >= prec + 1)
-    return 0;
+#ifdef _MPFR_H_HAVE_INTMAX_T
 
-  MPFR_ASSERTD (e == prec);
+#define FUNCTION   mpfr_fits_uintmax_p
+#define MAXIMUM    MPFR_UINTMAX_MAX
+#define TYPE       uintmax_t
 
-  /* hard case: first round to prec bits, then check */
-  mpfr_init2 (x, prec);
-  mpfr_set (x, f, rnd);
-  res = MPFR_GET_EXP (x) == e;
-  mpfr_clear (x);
-  return res;
-}
+#include "fits_u.h"
 
 #endif
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2013-09-26 10:56:55.000000000 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p1"
+#define MPFR_VERSION_STRING "3.1.2-p2"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/src/version.c	2013-09-26 10:56:55.000000000 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p1";
+  return "3.1.2-p2";
 }
diff -Naurd mpfr-3.1.2-a/tests/tfits.c mpfr-3.1.2-b/tests/tfits.c
--- mpfr-3.1.2-a/tests/tfits.c	2013-03-13 15:37:45.000000000 +0000
+++ mpfr-3.1.2-b/tests/tfits.c	2013-09-26 10:56:55.000000000 +0000
@@ -33,155 +33,176 @@
 #include "mpfr-intmax.h"
 #include "mpfr-test.h"
 
-#define ERROR1 { printf("Initial error for x="); mpfr_dump(x); exit(1); }
-#define ERROR2 { printf("Error for x="); mpfr_dump(x); exit(1); }
+#define ERROR1(N)                                               \
+  do                                                            \
+    {                                                           \
+      printf("Error %d for rnd = %s and x = ", N,               \
+             mpfr_print_rnd_mode ((mpfr_rnd_t) r));             \
+      mpfr_dump(x);                                             \
+      exit(1);                                                  \
+    }                                                           \
+  while (0)
 
 static void check_intmax (void);
 
 int
 main (void)
 {
-  mpfr_t x;
+  mpfr_t x, y;
+  int i, r;
 
   tests_start_mpfr ();
 
   mpfr_init2 (x, 256);
+  mpfr_init2 (y, 8);
 
-  /* Check NAN */
-  mpfr_set_nan (x);
-  if (mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR1;
+  RND_LOOP (r)
+    {
 
-  /* Check INF */
-  mpfr_set_inf (x, 1);
-  if (mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR1;
+      /* Check NAN */
+      mpfr_set_nan (x);
+      if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (1);
+      if (mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (2);
+      if (mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (3);
+      if (mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (4);
+      if (mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (5);
+      if (mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (6);
 
-  /* Check Zero */
-  MPFR_SET_ZERO (x);
-  if (!mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check INF */
+      mpfr_set_inf (x, 1);
+      if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (7);
+      if (mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (8);
+      if (mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (9);
+      if (mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (10);
+      if (mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (11);
+      if (mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (12);
 
-  /* Check small op */
-  mpfr_set_str1 (x, "1@-1");
-  if (!mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check Zero */
+      MPFR_SET_ZERO (x);
+      if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (13);
+      if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (14);
+      if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (15);
+      if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (16);
+      if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (17);
+      if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (18);
 
-  /* Check 17 */
-  mpfr_set_ui (x, 17, MPFR_RNDN);
-  if (!mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check small positive op */
+      mpfr_set_str1 (x, "1@-1");
+      if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (19);
+      if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (20);
+      if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (21);
+      if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (22);
+      if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (23);
+      if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (24);
 
-  /* Check all other values */
-  mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN);
-  mpfr_mul_2exp (x, x, 1, MPFR_RNDN);
-  if (mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR1;
-  mpfr_mul_2exp (x, x, 40, MPFR_RNDN);
-  if (mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR1;
+      /* Check 17 */
+      mpfr_set_ui (x, 17, MPFR_RNDN);
+      if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (25);
+      if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (26);
+      if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (27);
+      if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (28);
+      if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (29);
+      if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (30);
 
-  mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN);
-  if (!mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_ui (x, LONG_MAX, MPFR_RNDN);
-  if (!mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_ui (x, UINT_MAX, MPFR_RNDN);
-  if (!mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_ui (x, INT_MAX, MPFR_RNDN);
-  if (!mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_ui (x, USHRT_MAX, MPFR_RNDN);
-  if (!mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_ui (x, SHRT_MAX, MPFR_RNDN);
-  if (!mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check all other values */
+      mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN);
+      mpfr_mul_2exp (x, x, 1, MPFR_RNDN);
+      if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (31);
+      if (mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (32);
+      mpfr_mul_2exp (x, x, 40, MPFR_RNDN);
+      if (mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (33);
+      if (mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (34);
+      if (mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (35);
+      if (mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (36);
+      if (mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (37);
 
-  mpfr_set_si (x, 1, MPFR_RNDN);
-  if (!mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR2;
+      mpfr_set_ui (x, ULONG_MAX, MPFR_RNDN);
+      if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (38);
+      mpfr_set_ui (x, LONG_MAX, MPFR_RNDN);
+      if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+        ERROR1 (39);
+      mpfr_set_ui (x, UINT_MAX, MPFR_RNDN);
+      if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (40);
+      mpfr_set_ui (x, INT_MAX, MPFR_RNDN);
+      if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (41);
+      mpfr_set_ui (x, USHRT_MAX, MPFR_RNDN);
+      if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (42);
+      mpfr_set_ui (x, SHRT_MAX, MPFR_RNDN);
+      if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (43);
 
-  /* Check negative value */
-  mpfr_set_si (x, -1, MPFR_RNDN);
-  if (!mpfr_fits_sint_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_sshort_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_slong_p (x, MPFR_RNDN))
-    ERROR2;
-  if (mpfr_fits_uint_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_ushort_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_ulong_p (x, MPFR_RNDN))
-    ERROR1;
+      mpfr_set_si (x, 1, MPFR_RNDN);
+      if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+        ERROR1 (44);
+      if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+        ERROR1 (45);
+
+      /* Check negative op */
+      for (i = 1; i <= 4; i++)
+        {
+          int inv;
+
+          mpfr_set_si_2exp (x, -i, -2, MPFR_RNDN);
+          mpfr_rint (y, x, (mpfr_rnd_t) r);
+          inv = MPFR_NOTZERO (y);
+          if (!mpfr_fits_ulong_p (x, (mpfr_rnd_t) r) ^ inv)
+            ERROR1 (46);
+          if (!mpfr_fits_slong_p (x, (mpfr_rnd_t) r))
+            ERROR1 (47);
+          if (!mpfr_fits_uint_p (x, (mpfr_rnd_t) r) ^ inv)
+            ERROR1 (48);
+          if (!mpfr_fits_sint_p (x, (mpfr_rnd_t) r))
+            ERROR1 (49);
+          if (!mpfr_fits_ushort_p (x, (mpfr_rnd_t) r) ^ inv)
+            ERROR1 (50);
+          if (!mpfr_fits_sshort_p (x, (mpfr_rnd_t) r))
+            ERROR1 (51);
+        }
+    }
 
   mpfr_clear (x);
+  mpfr_clear (y);
 
   check_intmax ();
 
@@ -189,85 +210,98 @@
   return 0;
 }
 
-static void check_intmax (void)
+static void
+check_intmax (void)
 {
 #ifdef _MPFR_H_HAVE_INTMAX_T
-  mpfr_t x;
+  mpfr_t x, y;
+  int i, r;
 
-  mpfr_init2 (x, sizeof (uintmax_t)*CHAR_BIT);
+  mpfr_init2 (x, sizeof (uintmax_t) * CHAR_BIT);
+  mpfr_init2 (y, 8);
 
-  /* Check NAN */
-  mpfr_set_nan (x);
-  if (mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR1;
+  RND_LOOP (r)
+    {
+      /* Check NAN */
+      mpfr_set_nan (x);
+      if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (52);
+      if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (53);
 
-  /* Check INF */
-  mpfr_set_inf (x, 1);
-  if (mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR1;
+      /* Check INF */
+      mpfr_set_inf (x, 1);
+      if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (54);
+      if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (55);
 
-  /* Check Zero */
-  MPFR_SET_ZERO (x);
-  if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check Zero */
+      MPFR_SET_ZERO (x);
+      if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (56);
+      if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (57);
 
-  /* Check small op */
-  mpfr_set_str1 (x, "1@-1");
-  if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check positive small op */
+      mpfr_set_str1 (x, "1@-1");
+      if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (58);
+      if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (59);
 
-  /* Check 17 */
-  mpfr_set_ui (x, 17, MPFR_RNDN);
-  if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR2;
-  if (!mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR2;
+      /* Check 17 */
+      mpfr_set_ui (x, 17, MPFR_RNDN);
+      if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (60);
+      if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (61);
 
-  /* Check hugest */
-  mpfr_set_ui_2exp (x, 42, sizeof (uintmax_t) * 32, MPFR_RNDN);
-  if (mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR1;
-  if (mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR1;
+      /* Check hugest */
+      mpfr_set_ui_2exp (x, 42, sizeof (uintmax_t) * 32, MPFR_RNDN);
+      if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (62);
+      if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (63);
 
-  /* Check all other values */
-  mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN);
-  mpfr_add_ui (x, x, 1, MPFR_RNDN);
-  if (mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR1;
-  mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN);
-  if (!mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN);
-  mpfr_add_ui (x, x, 1, MPFR_RNDN);
-  if (mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR1;
-  mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN);
-  if (!mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_set_sj (x, MPFR_INTMAX_MIN, MPFR_RNDN);
-  if (!mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR2;
-  mpfr_sub_ui (x, x, 1, MPFR_RNDN);
-  if (mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR1;
+      /* Check all other values */
+      mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN);
+      mpfr_add_ui (x, x, 1, MPFR_RNDN);
+      if (mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (64);
+      mpfr_set_uj (x, MPFR_UINTMAX_MAX, MPFR_RNDN);
+      if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (65);
+      mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN);
+      mpfr_add_ui (x, x, 1, MPFR_RNDN);
+      if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (66);
+      mpfr_set_sj (x, MPFR_INTMAX_MAX, MPFR_RNDN);
+      if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (67);
+      mpfr_set_sj (x, MPFR_INTMAX_MIN, MPFR_RNDN);
+      if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (68);
+      mpfr_sub_ui (x, x, 1, MPFR_RNDN);
+      if (mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+        ERROR1 (69);
 
-  /* Check negative value */
-  mpfr_set_si (x, -1, MPFR_RNDN);
-  if (!mpfr_fits_intmax_p (x, MPFR_RNDN))
-    ERROR2;
-  if (mpfr_fits_uintmax_p (x, MPFR_RNDN))
-    ERROR1;
+      /* Check negative op */
+      for (i = 1; i <= 4; i++)
+        {
+          int inv;
+
+          mpfr_set_si_2exp (x, -i, -2, MPFR_RNDN);
+          mpfr_rint (y, x, (mpfr_rnd_t) r);
+          inv = MPFR_NOTZERO (y);
+          if (!mpfr_fits_uintmax_p (x, (mpfr_rnd_t) r) ^ inv)
+            ERROR1 (70);
+          if (!mpfr_fits_intmax_p (x, (mpfr_rnd_t) r))
+            ERROR1 (71);
+        }
+    }
 
   mpfr_clear (x);
+  mpfr_clear (y);
 #endif
 }
-
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2013-10-09 13:34:21.000000000 +0000
+++ mpfr-3.1.2-b/PATCHES	2013-10-09 13:34:21.000000000 +0000
@@ -0,0 +1 @@
+clang-divby0
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/VERSION	2013-10-09 13:34:21.000000000 +0000
@@ -1 +1 @@
-3.1.2-p2
+3.1.2-p3
diff -Naurd mpfr-3.1.2-a/src/mpfr-impl.h mpfr-3.1.2-b/src/mpfr-impl.h
--- mpfr-3.1.2-a/src/mpfr-impl.h	2013-03-13 15:37:36.000000000 +0000
+++ mpfr-3.1.2-b/src/mpfr-impl.h	2013-10-09 13:34:21.000000000 +0000
@@ -468,8 +468,16 @@
 #define MPFR_LIMBS_PER_FLT ((IEEE_FLT_MANT_DIG-1)/GMP_NUMB_BITS+1)
 
 /* Visual C++ doesn't support +1.0/0.0, -1.0/0.0 and 0.0/0.0
-   at compile time. */
-#if defined(_MSC_VER) && defined(_WIN32) && (_MSC_VER >= 1200)
+   at compile time.
+   Clang with -fsanitize=undefined is a bit similar due to a bug:
+     http://llvm.org/bugs/show_bug.cgi?id=17381
+   but even without its sanitizer, it may be better to use the
+   double_zero version until IEEE 754 division by zero is properly
+   supported:
+     http://llvm.org/bugs/show_bug.cgi?id=17000
+*/
+#if (defined(_MSC_VER) && defined(_WIN32) && (_MSC_VER >= 1200)) || \
+    defined(__clang__)
 static double double_zero = 0.0;
 # define DBL_NAN (double_zero/double_zero)
 # define DBL_POS_INF ((double) 1.0/double_zero)
@@ -501,6 +509,8 @@
    (with Xcode 2.4.1, i.e. the latest one). */
 #define LVALUE(x) (&(x) == &(x) || &(x) != &(x))
 #define DOUBLE_ISINF(x) (LVALUE(x) && ((x) > DBL_MAX || (x) < -DBL_MAX))
+/* The DOUBLE_ISNAN(x) macro is also valid on long double x
+   (assuming that the compiler isn't too broken). */
 #ifdef MPFR_NANISNAN
 /* Avoid MIPSpro / IRIX64 / gcc -ffast-math (incorrect) optimizations.
    The + must not be replaced by a ||. With gcc -ffast-math, NaN is
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2013-10-09 13:34:21.000000000 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p2"
+#define MPFR_VERSION_STRING "3.1.2-p3"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2013-09-26 10:52:52.000000000 +0000
+++ mpfr-3.1.2-b/src/version.c	2013-10-09 13:34:21.000000000 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p2";
+  return "3.1.2-p3";
 }
diff -Naurd mpfr-3.1.2-a/tests/tget_flt.c mpfr-3.1.2-b/tests/tget_flt.c
--- mpfr-3.1.2-a/tests/tget_flt.c	2013-03-13 15:37:44.000000000 +0000
+++ mpfr-3.1.2-b/tests/tget_flt.c	2013-10-09 13:34:21.000000000 +0000
@@ -28,9 +28,17 @@
 main (void)
 {
   mpfr_t x, y;
-  float f, g, infp;
+  float f, g;
   int i;
+#if !defined(MPFR_ERRDIVZERO)
+  float infp;
+#endif
+
+  tests_start_mpfr ();
 
+#if !defined(MPFR_ERRDIVZERO)
+  /* The definition of DBL_POS_INF involves a division by 0. This makes
+     "clang -O2 -fsanitize=undefined -fno-sanitize-recover" fail. */
   infp = (float) DBL_POS_INF;
   if (infp * 0.5 != infp)
     {
@@ -38,8 +46,7 @@
       fprintf (stderr, "(this is probably a compiler bug, please report)\n");
       exit (1);
     }
-
-  tests_start_mpfr ();
+#endif
 
   mpfr_init2 (x, 24);
   mpfr_init2 (y, 24);
@@ -353,6 +360,7 @@
       printf ("expected %.8e, got %.8e\n", g, f);
       exit (1);
     }
+#if !defined(MPFR_ERRDIVZERO)
   f = mpfr_get_flt (x, MPFR_RNDN); /* first round to 2^128 (even rule),
                                       thus we should get +Inf */
   g = infp;
@@ -376,6 +384,7 @@
       printf ("expected %.8e, got %.8e\n", g, f);
       exit (1);
     }
+#endif
 
   mpfr_clear (x);
   mpfr_clear (y);
diff -Naurd mpfr-3.1.2-a/tests/tset_ld.c mpfr-3.1.2-b/tests/tset_ld.c
--- mpfr-3.1.2-a/tests/tset_ld.c	2013-03-13 15:37:44.000000000 +0000
+++ mpfr-3.1.2-b/tests/tset_ld.c	2013-10-09 13:34:21.000000000 +0000
@@ -47,8 +47,11 @@
 static int
 Isnan_ld (long double d)
 {
-  double e = (double) d;
-  if (DOUBLE_ISNAN (e))
+  /* Do not convert d to double as this can give an overflow, which
+     may confuse compilers without IEEE 754 support (such as clang
+     -fsanitize=undefined), or trigger a trap if enabled.
+     The DOUBLE_ISNAN macro should work fine on long double. */
+  if (DOUBLE_ISNAN (d))
     return 1;
   LONGDOUBLE_NAN_ACTION (d, goto yes);
   return 0;
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2013-11-15 00:51:49.211333830 +0000
+++ mpfr-3.1.2-b/PATCHES	2013-11-15 00:51:49.323334999 +0000
@@ -0,0 +1 @@
+printf-alt0
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2013-11-15 00:51:49.211333830 +0000
+++ mpfr-3.1.2-b/VERSION	2013-11-15 00:51:49.323334999 +0000
@@ -1 +1 @@
-3.1.2-p3
+3.1.2-p4
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2013-11-15 00:51:49.211333830 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2013-11-15 00:51:49.323334999 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p3"
+#define MPFR_VERSION_STRING "3.1.2-p4"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/vasprintf.c mpfr-3.1.2-b/src/vasprintf.c
--- mpfr-3.1.2-a/src/vasprintf.c	2013-03-13 15:37:37.000000000 +0000
+++ mpfr-3.1.2-b/src/vasprintf.c	2013-11-15 00:51:49.267334408 +0000
@@ -1040,7 +1040,7 @@
 }
 
 /* Determine the different parts of the string representation of the regular
-   number P when SPEC.SPEC is 'e', 'E', 'g', or 'G'.
+   number P when spec.spec is 'e', 'E', 'g', or 'G'.
    DEC_INFO contains the previously computed exponent and string or is NULL.
 
    return -1 if some field > INT_MAX */
@@ -1167,7 +1167,7 @@
 }
 
 /* Determine the different parts of the string representation of the regular
-   number P when SPEC.SPEC is 'f', 'F', 'g', or 'G'.
+   number P when spec.spec is 'f', 'F', 'g', or 'G'.
    DEC_INFO contains the previously computed exponent and string or is NULL.
 
    return -1 if some field of number_parts is greater than INT_MAX */
@@ -1559,7 +1559,7 @@
             /* fractional part */
             {
               np->point = MPFR_DECIMAL_POINT;
-              np->fp_trailing_zeros = (spec.spec == 'g' && spec.spec == 'G') ?
+              np->fp_trailing_zeros = (spec.spec == 'g' || spec.spec == 'G') ?
                 spec.prec - 1 : spec.prec;
             }
           else if (spec.alt)
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2013-11-15 00:51:49.211333830 +0000
+++ mpfr-3.1.2-b/src/version.c	2013-11-15 00:51:49.323334999 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p3";
+  return "3.1.2-p4";
 }
diff -Naurd mpfr-3.1.2-a/tests/tsprintf.c mpfr-3.1.2-b/tests/tsprintf.c
--- mpfr-3.1.2-a/tests/tsprintf.c	2013-03-13 15:37:44.000000000 +0000
+++ mpfr-3.1.2-b/tests/tsprintf.c	2013-11-15 00:51:49.267334408 +0000
@@ -456,10 +456,16 @@
   check_sprintf ("1.999900  ", "%-#10.7RG", x);
   check_sprintf ("1.9999    ", "%-10.7RG", x);
   mpfr_set_ui (x, 1, MPFR_RNDN);
+  check_sprintf ("1.", "%#.1Rg", x);
+  check_sprintf ("1.   ", "%-#5.1Rg", x);
+  check_sprintf ("  1.0", "%#5.2Rg", x);
   check_sprintf ("1.00000000000000000000000000000", "%#.30Rg", x);
   check_sprintf ("1", "%.30Rg", x);
   mpfr_set_ui (x, 0, MPFR_RNDN);
-  check_sprintf ("0.000000000000000000000000000000", "%#.30Rg", x);
+  check_sprintf ("0.", "%#.1Rg", x);
+  check_sprintf ("0.   ", "%-#5.1Rg", x);
+  check_sprintf ("  0.0", "%#5.2Rg", x);
+  check_sprintf ("0.00000000000000000000000000000", "%#.30Rg", x);
   check_sprintf ("0", "%.30Rg", x);
 
   /* following tests with precision 53 bits */
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2013-12-01 11:07:49.575329762 +0000
+++ mpfr-3.1.2-b/PATCHES	2013-12-01 11:07:49.751331625 +0000
@@ -0,0 +1 @@
+custom_init_set
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2013-12-01 11:07:49.571329714 +0000
+++ mpfr-3.1.2-b/VERSION	2013-12-01 11:07:49.747331585 +0000
@@ -1 +1 @@
-3.1.2-p4
+3.1.2-p5
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2013-12-01 11:07:49.571329714 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2013-12-01 11:07:49.747331585 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p4"
+#define MPFR_VERSION_STRING "3.1.2-p5"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
@@ -861,7 +861,7 @@
     _t = (mpfr_kind_t) _k;                                     \
     _s = 1;                                                    \
   } else {                                                     \
-    _t = (mpfr_kind_t) -k;                                     \
+    _t = (mpfr_kind_t) - _k;                                   \
     _s = -1;                                                   \
   }                                                            \
   _e = _t == MPFR_REGULAR_KIND ? (e) :                         \
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2013-12-01 11:07:49.575329762 +0000
+++ mpfr-3.1.2-b/src/version.c	2013-12-01 11:07:49.747331585 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p4";
+  return "3.1.2-p5";
 }
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2014-04-15 21:56:49.609057464 +0000
+++ mpfr-3.1.2-b/PATCHES	2014-04-15 21:56:49.697059857 +0000
@@ -0,0 +1 @@
+li2-return
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2014-04-15 21:56:49.609057464 +0000
+++ mpfr-3.1.2-b/VERSION	2014-04-15 21:56:49.697059857 +0000
@@ -1 +1 @@
-3.1.2-p5
+3.1.2-p6
diff -Naurd mpfr-3.1.2-a/src/li2.c mpfr-3.1.2-b/src/li2.c
--- mpfr-3.1.2-a/src/li2.c	2013-03-13 15:37:32.000000000 +0000
+++ mpfr-3.1.2-b/src/li2.c	2014-04-15 21:56:49.653058661 +0000
@@ -630,5 +630,5 @@
       return mpfr_check_range (y, inexact, rnd_mode);
     }
 
-  MPFR_ASSERTN (0);             /* should never reach this point */
+  MPFR_RET_NEVER_GO_HERE ();
 }
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2014-04-15 21:56:49.609057464 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2014-04-15 21:56:49.697059857 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p5"
+#define MPFR_VERSION_STRING "3.1.2-p6"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2014-04-15 21:56:49.609057464 +0000
+++ mpfr-3.1.2-b/src/version.c	2014-04-15 21:56:49.697059857 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p5";
+  return "3.1.2-p6";
 }
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2014-04-15 22:04:57.090286262 +0000
+++ mpfr-3.1.2-b/PATCHES	2014-04-15 22:04:57.162288198 +0000
@@ -0,0 +1 @@
+exp3
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2014-04-15 22:04:57.086286154 +0000
+++ mpfr-3.1.2-b/VERSION	2014-04-15 22:04:57.162288198 +0000
@@ -1 +1 @@
-3.1.2-p6
+3.1.2-p7
diff -Naurd mpfr-3.1.2-a/src/exp3.c mpfr-3.1.2-b/src/exp3.c
--- mpfr-3.1.2-a/src/exp3.c	2013-03-13 15:37:34.000000000 +0000
+++ mpfr-3.1.2-b/src/exp3.c	2014-04-15 22:04:57.126287230 +0000
@@ -283,7 +283,7 @@
             }
         }
 
-      if (mpfr_can_round (shift_x > 0 ? t : tmp, realprec, MPFR_RNDD, MPFR_RNDZ,
+      if (mpfr_can_round (shift_x > 0 ? t : tmp, realprec, MPFR_RNDN, MPFR_RNDZ,
                           MPFR_PREC(y) + (rnd_mode == MPFR_RNDN)))
         {
           inexact = mpfr_set (y, shift_x > 0 ? t : tmp, rnd_mode);
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2014-04-15 22:04:57.086286154 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2014-04-15 22:04:57.162288198 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p6"
+#define MPFR_VERSION_STRING "3.1.2-p7"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2014-04-15 22:04:57.090286262 +0000
+++ mpfr-3.1.2-b/src/version.c	2014-04-15 22:04:57.162288198 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p6";
+  return "3.1.2-p7";
 }
diff -Naurd mpfr-3.1.2-a/tests/texp.c mpfr-3.1.2-b/tests/texp.c
--- mpfr-3.1.2-a/tests/texp.c	2013-03-13 15:37:44.000000000 +0000
+++ mpfr-3.1.2-b/tests/texp.c	2014-04-15 22:04:57.126287230 +0000
@@ -150,6 +150,22 @@
       exit (1);
     }
 
+  mpfr_set_prec (x, 118);
+  mpfr_set_str_binary (x, "0.1110010100011101010000111110011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E-86");
+  mpfr_set_prec (y, 118);
+  mpfr_exp_2 (y, x, MPFR_RNDU);
+  mpfr_exp_3 (x, x, MPFR_RNDU);
+  if (mpfr_cmp (x, y))
+    {
+      printf ("mpfr_exp_2 and mpfr_exp_3 differ for prec=118\n");
+      printf ("mpfr_exp_2 gives ");
+      mpfr_out_str (stdout, 2, 0, y, MPFR_RNDN);
+      printf ("\nmpfr_exp_3 gives ");
+      mpfr_out_str (stdout, 2, 0, x, MPFR_RNDN);
+      printf ("\n");
+      exit (1);
+    }
+
   mpfr_clear (x);
   mpfr_clear (y);
   return 0;
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2014-04-15 22:20:32.243481506 +0000
+++ mpfr-3.1.2-b/PATCHES	2014-04-15 22:22:32.418722707 +0000
@@ -0,0 +1 @@
+gmp6-compat
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2014-04-15 22:20:20.755171478 +0000
+++ mpfr-3.1.2-b/VERSION	2014-04-15 22:21:45.225450147 +0000
@@ -1 +1 @@
-3.1.2-p7
+3.1.2-p8
diff -Naurd mpfr-3.1.2-a/configure mpfr-3.1.2-b/configure
--- mpfr-3.1.2-a/configure	2013-03-13 15:38:20.000000000 +0000
+++ mpfr-3.1.2-b/configure	2014-04-15 22:21:38.821277476 +0000
@@ -14545,26 +14545,30 @@
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-if test "$use_gmp_build" = yes ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for valid GMP_NUMB_BITS" >&5
-$as_echo_n "checking for valid GMP_NUMB_BITS... " >&6; }
-  if test "$cross_compiling" = yes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency" >&5
+$as_echo_n "checking for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency... " >&6; }
+if test "$cross_compiling" = yes; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't test" >&5
 $as_echo "can't test" >&6; }
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
+#include <stdio.h>
 #include <limits.h>
 #include "gmp.h"
-#include "gmp-impl.h"
 
 int
 main ()
 {
 
-  return GMP_NUMB_BITS == BYTES_PER_MP_LIMB * CHAR_BIT
-         && sizeof(mp_limb_t) == BYTES_PER_MP_LIMB ? 0 : 1;
+  if (GMP_NUMB_BITS == sizeof(mp_limb_t) * CHAR_BIT)
+    return 0;
+  fprintf (stderr, "GMP_NUMB_BITS     = %ld\n", (long) GMP_NUMB_BITS);
+  fprintf (stderr, "sizeof(mp_limb_t) = %ld\n", (long) sizeof(mp_limb_t));
+  fprintf (stderr, "sizeof(mp_limb_t) * CHAR_BIT = %ld != GMP_NUMB_BITS\n",
+           (long) (sizeof(mp_limb_t) * CHAR_BIT));
+  return 1;
 
   ;
   return 0;
@@ -14577,14 +14581,14 @@
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-       as_fn_error $? "GMP_NUMB_BITS is incorrect.
-You probably need to change some of the GMP or MPFR compile options." "$LINENO" 5
+       as_fn_error $? "GMP_NUMB_BITS and sizeof(mp_limb_t) are not consistent.
+You probably need to change some of the GMP or MPFR compile options.
+See 'config.log' for details (search for GMP_NUMB_BITS)." "$LINENO" 5
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-fi
 
 
 if test "$dont_link_with_gmp" = yes ; then
diff -Naurd mpfr-3.1.2-a/configure.ac mpfr-3.1.2-b/configure.ac
--- mpfr-3.1.2-a/configure.ac	2013-03-13 15:37:46.000000000 +0000
+++ mpfr-3.1.2-b/configure.ac	2013-03-13 15:37:46.000000000 +0000
@@ -435,23 +435,29 @@
    ])
 fi
 
-dnl Check for valid GMP_NUMB_BITS and BYTES_PER_MP_LIMB
+dnl Check for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency.
+dnl Problems may occur if gmp.h was generated with some ABI
+dnl and is used with another ABI (or if nails are used).
 dnl This test doesn't need to link with libgmp (at least it shouldn't).
-if test "$use_gmp_build" = yes ; then
-  AC_MSG_CHECKING(for valid GMP_NUMB_BITS)
-  AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+AC_MSG_CHECKING(for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency)
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <stdio.h>
 #include <limits.h>
 #include "gmp.h"
-#include "gmp-impl.h"
 ]], [[
-  return GMP_NUMB_BITS == BYTES_PER_MP_LIMB * CHAR_BIT
-         && sizeof(mp_limb_t) == BYTES_PER_MP_LIMB ? 0 : 1;
+  if (GMP_NUMB_BITS == sizeof(mp_limb_t) * CHAR_BIT)
+    return 0;
+  fprintf (stderr, "GMP_NUMB_BITS     = %ld\n", (long) GMP_NUMB_BITS);
+  fprintf (stderr, "sizeof(mp_limb_t) = %ld\n", (long) sizeof(mp_limb_t));
+  fprintf (stderr, "sizeof(mp_limb_t) * CHAR_BIT = %ld != GMP_NUMB_BITS\n",
+           (long) (sizeof(mp_limb_t) * CHAR_BIT));
+  return 1;
 ]])], [AC_MSG_RESULT(yes)], [
        AC_MSG_RESULT(no)
-       AC_MSG_ERROR([GMP_NUMB_BITS is incorrect.
-You probably need to change some of the GMP or MPFR compile options.])],
+       AC_MSG_ERROR([GMP_NUMB_BITS and sizeof(mp_limb_t) are not consistent.
+You probably need to change some of the GMP or MPFR compile options.
+See 'config.log' for details (search for GMP_NUMB_BITS).])],
        [AC_MSG_RESULT([can't test])])
-fi
 
 
 dnl We really need to link using libtool. But it is impossible with the current
diff -Naurd mpfr-3.1.2-a/src/init2.c mpfr-3.1.2-b/src/init2.c
--- mpfr-3.1.2-a/src/init2.c	2013-03-13 15:37:32.000000000 +0000
+++ mpfr-3.1.2-b/src/init2.c	2014-04-15 22:21:06.220398489 +0000
@@ -30,11 +30,11 @@
 
   /* Check if we can represent the number of limbs
    * associated to the maximum of mpfr_prec_t*/
-  MPFR_ASSERTN( MP_SIZE_T_MAX >= (MPFR_PREC_MAX/BYTES_PER_MP_LIMB) );
+  MPFR_ASSERTN( MP_SIZE_T_MAX >= (MPFR_PREC_MAX/MPFR_BYTES_PER_MP_LIMB) );
 
-  /* Check for correct GMP_NUMB_BITS and BYTES_PER_MP_LIMB */
-  MPFR_ASSERTN( GMP_NUMB_BITS == BYTES_PER_MP_LIMB * CHAR_BIT
-                && sizeof(mp_limb_t) == BYTES_PER_MP_LIMB );
+  /* Check for correct GMP_NUMB_BITS and MPFR_BYTES_PER_MP_LIMB */
+  MPFR_ASSERTN( GMP_NUMB_BITS == MPFR_BYTES_PER_MP_LIMB * CHAR_BIT
+                && sizeof(mp_limb_t) == MPFR_BYTES_PER_MP_LIMB );
 
   MPFR_ASSERTN (mp_bits_per_limb == GMP_NUMB_BITS);
 
diff -Naurd mpfr-3.1.2-a/src/mpfr-gmp.h mpfr-3.1.2-b/src/mpfr-gmp.h
--- mpfr-3.1.2-a/src/mpfr-gmp.h	2013-03-13 15:37:32.000000000 +0000
+++ mpfr-3.1.2-b/src/mpfr-gmp.h	2014-04-15 22:21:06.220398489 +0000
@@ -72,7 +72,6 @@
 #endif
 
 /* Define some macros */
-#define BYTES_PER_MP_LIMB (GMP_NUMB_BITS/CHAR_BIT)
 
 #define MP_LIMB_T_MAX (~(mp_limb_t)0)
 
@@ -96,19 +95,19 @@
 #define SHRT_HIGHBIT       SHRT_MIN
 
 /* MP_LIMB macros */
-#define MPN_ZERO(dst, n) memset((dst), 0, (n)*BYTES_PER_MP_LIMB)
-#define MPN_COPY_DECR(dst,src,n) memmove((dst),(src),(n)*BYTES_PER_MP_LIMB)
-#define MPN_COPY_INCR(dst,src,n) memmove((dst),(src),(n)*BYTES_PER_MP_LIMB)
+#define MPN_ZERO(dst, n) memset((dst), 0, (n)*MPFR_BYTES_PER_MP_LIMB)
+#define MPN_COPY_DECR(dst,src,n) memmove((dst),(src),(n)*MPFR_BYTES_PER_MP_LIMB)
+#define MPN_COPY_INCR(dst,src,n) memmove((dst),(src),(n)*MPFR_BYTES_PER_MP_LIMB)
 #define MPN_COPY(dst,src,n) \
   do                                                                  \
     {                                                                 \
       if ((dst) != (src))                                             \
         {                                                             \
           MPFR_ASSERTD ((char *) (dst) >= (char *) (src) +            \
-                                          (n) * BYTES_PER_MP_LIMB ||  \
+                                     (n) * MPFR_BYTES_PER_MP_LIMB ||  \
                         (char *) (src) >= (char *) (dst) +            \
-                                          (n) * BYTES_PER_MP_LIMB);   \
-          memcpy ((dst), (src), (n) * BYTES_PER_MP_LIMB);             \
+                                     (n) * MPFR_BYTES_PER_MP_LIMB);   \
+          memcpy ((dst), (src), (n) * MPFR_BYTES_PER_MP_LIMB);        \
         }                                                             \
     }                                                                 \
   while (0)
diff -Naurd mpfr-3.1.2-a/src/mpfr-impl.h mpfr-3.1.2-b/src/mpfr-impl.h
--- mpfr-3.1.2-a/src/mpfr-impl.h	2013-10-09 13:34:21.000000000 +0000
+++ mpfr-3.1.2-b/src/mpfr-impl.h	2014-04-15 22:21:06.220398489 +0000
@@ -191,7 +191,7 @@
 # endif
 #endif
 
-
+#define MPFR_BYTES_PER_MP_LIMB (GMP_NUMB_BITS/CHAR_BIT)
 
 /******************************************************
  ******************** Check GMP ***********************
@@ -930,7 +930,7 @@
 #define MPFR_SET_ALLOC_SIZE(x, n) \
  ( ((mp_size_t*) MPFR_MANT(x))[-1] = n)
 #define MPFR_MALLOC_SIZE(s) \
-  ( sizeof(mpfr_size_limb_t) + BYTES_PER_MP_LIMB * ((size_t) s) )
+  ( sizeof(mpfr_size_limb_t) + MPFR_BYTES_PER_MP_LIMB * ((size_t) s) )
 #define MPFR_SET_MANT_PTR(x,p) \
    (MPFR_MANT(x) = (mp_limb_t*) ((mpfr_size_limb_t*) p + 1))
 #define MPFR_GET_REAL_PTR(x) \
@@ -964,7 +964,7 @@
 #endif
 
 #define MPFR_TMP_LIMBS_ALLOC(N) \
-  ((mp_limb_t *) MPFR_TMP_ALLOC ((size_t) (N) * BYTES_PER_MP_LIMB))
+  ((mp_limb_t *) MPFR_TMP_ALLOC ((size_t) (N) * MPFR_BYTES_PER_MP_LIMB))
 
 /* temporary allocate 1 limb at xp, and initialize mpfr variable x */
 /* The temporary var doesn't have any size field, but it doesn't matter
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2014-04-15 22:20:20.755171478 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2014-04-15 22:21:45.225450147 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p7"
+#define MPFR_VERSION_STRING "3.1.2-p8"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/mul.c mpfr-3.1.2-b/src/mul.c
--- mpfr-3.1.2-a/src/mul.c	2013-03-13 15:37:37.000000000 +0000
+++ mpfr-3.1.2-b/src/mul.c	2014-04-15 22:21:06.224398597 +0000
@@ -106,7 +106,7 @@
   MPFR_ASSERTD(tn <= k);
 
   /* Check for no size_t overflow*/
-  MPFR_ASSERTD((size_t) k <= ((size_t) -1) / BYTES_PER_MP_LIMB);
+  MPFR_ASSERTD((size_t) k <= ((size_t) -1) / MPFR_BYTES_PER_MP_LIMB);
   MPFR_TMP_MARK(marker);
   tmp = MPFR_TMP_LIMBS_ALLOC (k);
 
@@ -301,7 +301,7 @@
   MPFR_ASSERTD (tn <= k); /* tn <= k, thus no int overflow */
 
   /* Check for no size_t overflow*/
-  MPFR_ASSERTD ((size_t) k <= ((size_t) -1) / BYTES_PER_MP_LIMB);
+  MPFR_ASSERTD ((size_t) k <= ((size_t) -1) / MPFR_BYTES_PER_MP_LIMB);
   MPFR_TMP_MARK (marker);
   tmp = MPFR_TMP_LIMBS_ALLOC (k);
 
diff -Naurd mpfr-3.1.2-a/src/stack_interface.c mpfr-3.1.2-b/src/stack_interface.c
--- mpfr-3.1.2-a/src/stack_interface.c	2013-03-13 15:37:32.000000000 +0000
+++ mpfr-3.1.2-b/src/stack_interface.c	2014-04-15 22:21:06.220398489 +0000
@@ -26,7 +26,7 @@
 size_t
 mpfr_custom_get_size (mpfr_prec_t prec)
 {
-  return MPFR_PREC2LIMBS (prec) * BYTES_PER_MP_LIMB;
+  return MPFR_PREC2LIMBS (prec) * MPFR_BYTES_PER_MP_LIMB;
 }
 
 #undef mpfr_custom_init
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2014-04-15 22:20:20.755171478 +0000
+++ mpfr-3.1.2-b/src/version.c	2014-04-15 22:21:45.225450147 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p7";
+  return "3.1.2-p8";
 }
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2014-06-30 15:15:25.533266905 +0000
+++ mpfr-3.1.2-b/PATCHES	2014-06-30 15:15:25.617269178 +0000
@@ -0,0 +1 @@
+div-overflow
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2014-06-30 15:15:25.529266797 +0000
+++ mpfr-3.1.2-b/VERSION	2014-06-30 15:15:25.617269178 +0000
@@ -1 +1 @@
-3.1.2-p8
+3.1.2-p9
diff -Naurd mpfr-3.1.2-a/src/div.c mpfr-3.1.2-b/src/div.c
--- mpfr-3.1.2-a/src/div.c	2013-03-13 15:37:33.000000000 +0000
+++ mpfr-3.1.2-b/src/div.c	2014-06-30 15:15:25.585268312 +0000
@@ -750,7 +750,9 @@
  truncate_check_qh:
   if (qh)
     {
-      qexp ++;
+      if (MPFR_LIKELY (qexp < MPFR_EXP_MAX))
+        qexp ++;
+      /* else qexp is now incorrect, but one will still get an overflow */
       q0p[q0size - 1] = MPFR_LIMB_HIGHBIT;
     }
   goto truncate;
@@ -765,7 +767,9 @@
   inex = 1; /* always here */
   if (mpn_add_1 (q0p, q0p, q0size, MPFR_LIMB_ONE << sh))
     {
-      qexp ++;
+      if (MPFR_LIKELY (qexp < MPFR_EXP_MAX))
+        qexp ++;
+      /* else qexp is now incorrect, but one will still get an overflow */
       q0p[q0size - 1] = MPFR_LIMB_HIGHBIT;
     }
 
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2014-06-30 15:15:25.533266905 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2014-06-30 15:15:25.613269070 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p8"
+#define MPFR_VERSION_STRING "3.1.2-p9"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2014-06-30 15:15:25.533266905 +0000
+++ mpfr-3.1.2-b/src/version.c	2014-06-30 15:15:25.613269070 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p8";
+  return "3.1.2-p9";
 }
diff -Naurd mpfr-3.1.2-a/tests/tdiv.c mpfr-3.1.2-b/tests/tdiv.c
--- mpfr-3.1.2-a/tests/tdiv.c	2013-03-13 15:37:44.000000000 +0000
+++ mpfr-3.1.2-b/tests/tdiv.c	2014-06-30 15:15:25.585268312 +0000
@@ -1104,6 +1104,96 @@
 #define RAND_FUNCTION(x) mpfr_random2(x, MPFR_LIMB_SIZE (x), randlimb () % 100, RANDS)
 #include "tgeneric.c"
 
+static void
+test_extreme (void)
+{
+  mpfr_t x, y, z;
+  mpfr_exp_t emin, emax;
+  mpfr_prec_t p[4] = { 8, 32, 64, 256 };
+  int xi, yi, zi, j, r;
+  unsigned int flags, ex_flags;
+
+  emin = mpfr_get_emin ();
+  emax = mpfr_get_emax ();
+
+  mpfr_set_emin (MPFR_EMIN_MIN);
+  mpfr_set_emax (MPFR_EMAX_MAX);
+
+  for (xi = 0; xi < 4; xi++)
+    {
+      mpfr_init2 (x, p[xi]);
+      mpfr_setmax (x, MPFR_EMAX_MAX);
+      MPFR_ASSERTN (mpfr_check (x));
+      for (yi = 0; yi < 4; yi++)
+        {
+          mpfr_init2 (y, p[yi]);
+          mpfr_setmin (y, MPFR_EMIN_MIN);
+          for (j = 0; j < 2; j++)
+            {
+              MPFR_ASSERTN (mpfr_check (y));
+              for (zi = 0; zi < 4; zi++)
+                {
+                  mpfr_init2 (z, p[zi]);
+                  RND_LOOP (r)
+                    {
+                      mpfr_clear_flags ();
+                      mpfr_div (z, x, y, (mpfr_rnd_t) r);
+                      flags = __gmpfr_flags;
+                      MPFR_ASSERTN (mpfr_check (z));
+                      ex_flags = MPFR_FLAGS_OVERFLOW | MPFR_FLAGS_INEXACT;
+                      if (flags != ex_flags)
+                        {
+                          printf ("Bad flags in test_extreme on z = a/b"
+                                  " with %s and\n",
+                                  mpfr_print_rnd_mode ((mpfr_rnd_t) r));
+                          printf ("a = ");
+                          mpfr_dump (x);
+                          printf ("b = ");
+                          mpfr_dump (y);
+                          printf ("Expected flags:");
+                          flags_out (ex_flags);
+                          printf ("Got flags:     ");
+                          flags_out (flags);
+                          printf ("z = ");
+                          mpfr_dump (z);
+                          exit (1);
+                        }
+                      mpfr_clear_flags ();
+                      mpfr_div (z, y, x, (mpfr_rnd_t) r);
+                      flags = __gmpfr_flags;
+                      MPFR_ASSERTN (mpfr_check (z));
+                      ex_flags = MPFR_FLAGS_UNDERFLOW | MPFR_FLAGS_INEXACT;
+                      if (flags != ex_flags)
+                        {
+                          printf ("Bad flags in test_extreme on z = a/b"
+                                  " with %s and\n",
+                                  mpfr_print_rnd_mode ((mpfr_rnd_t) r));
+                          printf ("a = ");
+                          mpfr_dump (y);
+                          printf ("b = ");
+                          mpfr_dump (x);
+                          printf ("Expected flags:");
+                          flags_out (ex_flags);
+                          printf ("Got flags:     ");
+                          flags_out (flags);
+                          printf ("z = ");
+                          mpfr_dump (z);
+                          exit (1);
+                        }
+                    }
+                  mpfr_clear (z);
+                }  /* zi */
+              mpfr_nextabove (y);
+            }  /* j */
+          mpfr_clear (y);
+        }  /* yi */
+      mpfr_clear (x);
+    }  /* xi */
+
+  set_emin (emin);
+  set_emax (emax);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -1130,6 +1220,7 @@
   test_20070603 ();
   test_20070628 ();
   test_generic (2, 800, 50);
+  test_extreme ();
 
   tests_end_mpfr ();
   return 0;
diff -Naurd mpfr-3.1.2-a/PATCHES mpfr-3.1.2-b/PATCHES
--- mpfr-3.1.2-a/PATCHES	2014-06-30 15:17:53.337268149 +0000
+++ mpfr-3.1.2-b/PATCHES	2014-06-30 15:17:53.417270314 +0000
@@ -0,0 +1 @@
+vasprintf
diff -Naurd mpfr-3.1.2-a/VERSION mpfr-3.1.2-b/VERSION
--- mpfr-3.1.2-a/VERSION	2014-06-30 15:17:53.337268149 +0000
+++ mpfr-3.1.2-b/VERSION	2014-06-30 15:17:53.413270206 +0000
@@ -1 +1 @@
-3.1.2-p9
+3.1.2-p10
diff -Naurd mpfr-3.1.2-a/src/mpfr.h mpfr-3.1.2-b/src/mpfr.h
--- mpfr-3.1.2-a/src/mpfr.h	2014-06-30 15:17:53.337268149 +0000
+++ mpfr-3.1.2-b/src/mpfr.h	2014-06-30 15:17:53.413270206 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 3
 #define MPFR_VERSION_MINOR 1
 #define MPFR_VERSION_PATCHLEVEL 2
-#define MPFR_VERSION_STRING "3.1.2-p9"
+#define MPFR_VERSION_STRING "3.1.2-p10"
 
 /* Macros dealing with MPFR VERSION */
 #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
diff -Naurd mpfr-3.1.2-a/src/vasprintf.c mpfr-3.1.2-b/src/vasprintf.c
--- mpfr-3.1.2-a/src/vasprintf.c	2013-11-15 00:51:49.267334408 +0000
+++ mpfr-3.1.2-b/src/vasprintf.c	2014-06-30 15:17:53.377269231 +0000
@@ -884,14 +884,18 @@
            first digit, we want the exponent for radix two and the decimal
            point AFTER the first digit. */
         {
-          MPFR_ASSERTN (exp > MPFR_EMIN_MIN /4); /* possible overflow */
+          /* An integer overflow is normally not possible since MPFR_EXP_MIN
+             is twice as large as MPFR_EMIN_MIN. */
+          MPFR_ASSERTN (exp > (MPFR_EXP_MIN + 3) / 4);
           exp = (exp - 1) * 4;
         }
       else
         /* EXP is the exponent for decimal point BEFORE the first digit, we
            want the exponent for decimal point AFTER the first digit. */
         {
-          MPFR_ASSERTN (exp > MPFR_EMIN_MIN); /* possible overflow */
+          /* An integer overflow is normally not possible since MPFR_EXP_MIN
+             is twice as large as MPFR_EMIN_MIN. */
+          MPFR_ASSERTN (exp > MPFR_EXP_MIN);
           --exp;
         }
     }
diff -Naurd mpfr-3.1.2-a/src/version.c mpfr-3.1.2-b/src/version.c
--- mpfr-3.1.2-a/src/version.c	2014-06-30 15:17:53.337268149 +0000
+++ mpfr-3.1.2-b/src/version.c	2014-06-30 15:17:53.413270206 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "3.1.2-p9";
+  return "3.1.2-p10";
 }
diff -Naurd mpfr-3.1.2-a/tests/tsprintf.c mpfr-3.1.2-b/tests/tsprintf.c
--- mpfr-3.1.2-a/tests/tsprintf.c	2013-11-15 00:51:49.267334408 +0000
+++ mpfr-3.1.2-b/tests/tsprintf.c	2014-06-30 15:17:53.377269231 +0000
@@ -1184,6 +1184,69 @@
   check_emax_aux (MPFR_EMAX_MAX);
 }
 
+static void
+check_emin_aux (mpfr_exp_t e)
+{
+  mpfr_t x;
+  char *s1, s2[256];
+  int i;
+  mpfr_exp_t emin;
+  mpz_t ee;
+
+  MPFR_ASSERTN (e >= LONG_MIN);
+  emin = mpfr_get_emin ();
+  set_emin (e);
+
+  mpfr_init2 (x, 16);
+  mpz_init (ee);
+
+  mpfr_setmin (x, e);
+  mpz_set_si (ee, e);
+  mpz_sub_ui (ee, ee, 1);
+
+  i = mpfr_asprintf (&s1, "%Ra", x);
+  MPFR_ASSERTN (i > 0);
+
+  gmp_snprintf (s2, 256, "0x1p%Zd", ee);
+
+  if (strcmp (s1, s2) != 0)
+    {
+      printf ("Error in check_emin_aux for emin = %ld\n", (long) e);
+      printf ("Expected %s\n", s2);
+      printf ("Got      %s\n", s1);
+      exit (1);
+    }
+
+  mpfr_free_str (s1);
+
+  i = mpfr_asprintf (&s1, "%Rb", x);
+  MPFR_ASSERTN (i > 0);
+
+  gmp_snprintf (s2, 256, "1p%Zd", ee);
+
+  if (strcmp (s1, s2) != 0)
+    {
+      printf ("Error in check_emin_aux for emin = %ld\n", (long) e);
+      printf ("Expected %s\n", s2);
+      printf ("Got      %s\n", s1);
+      exit (1);
+    }
+
+  mpfr_free_str (s1);
+
+  mpfr_clear (x);
+  mpz_clear (ee);
+  set_emin (emin);
+}
+
+static void
+check_emin (void)
+{
+  check_emin_aux (-15);
+  check_emin_aux (mpfr_get_emin ());
+  check_emin_aux (MPFR_EMIN_MIN);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -1203,6 +1266,7 @@
   decimal ();
   mixed ();
   check_emax ();
+  check_emin ();
 
 #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE)
   locale_da_DK ();
libmpfr4-yosemite-symbol-lookup.patch (application/octet-stream, 1.1 KB)
diff -uNr mpfr-3.1.2.orig/configure mpfr-3.1.2/configure
--- mpfr-3.1.2.orig/configure	2013-03-13 11:38:20.000000000 -0400
+++ mpfr-3.1.2/configure	2014-10-26 01:00:37.000000000 -0400
@@ -10401,7 +10401,7 @@
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
 	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[012]*)
+	10.[012][,.]*)
 	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
 	10.*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
diff -uNr mpfr-3.1.2.orig/m4/libtool.m4 mpfr-3.1.2/m4/libtool.m4
--- mpfr-3.1.2.orig/m4/libtool.m4	2013-03-13 11:38:16.000000000 -0400
+++ mpfr-3.1.2/m4/libtool.m4	2014-10-26 01:00:37.000000000 -0400
@@ -1052,7 +1052,7 @@
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
 	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
+	10.[[012]][[,.]]*)
 	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
 	10.*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
gmp5.info (application/octet-stream, 6 KB) - not displayed
gmp5.patch (application/octet-stream, 11 KB)
diff -uNr gmp-6.0.0/mpn/x86_64/atom/redc_1.asm gmp-6.0.0.fink/mpn/x86_64/atom/redc_1.asm
--- gmp-6.0.0/mpn/x86_64/atom/redc_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/atom/redc_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -276,7 +276,12 @@
 	mov	n, %r9			C param 4: n
 	mov	rp, %rcx	')	C param 1: rp
 
+IFSTD(`	sub	$8, %rsp	')
+IFDOS(`	sub	$40, %rsp	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_add_n)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 
 L(ret):	pop	%r15
 	pop	%r14
diff -uNr gmp-6.0.0/mpn/x86_64/bobcat/redc_1.asm gmp-6.0.0.fink/mpn/x86_64/bobcat/redc_1.asm
--- gmp-6.0.0/mpn/x86_64/bobcat/redc_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/bobcat/redc_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -258,7 +258,12 @@
 	mov	n, %r9			C param 4: n
 	mov	rp, %rcx	')	C param 1: rp
 
+IFSTD(`	sub	$8, %rsp	')
+IFDOS(`	sub	$40, %rsp	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_add_n)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 
 L(ret):	pop	%r15
 	pop	%r14
diff -uNr gmp-6.0.0/mpn/x86_64/core2/divrem_1.asm gmp-6.0.0.fink/mpn/x86_64/core2/divrem_1.asm
--- gmp-6.0.0/mpn/x86_64/core2/divrem_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/core2/divrem_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -1,6 +1,6 @@
 dnl  x86-64 mpn_divrem_1 -- mpn by limb division.
 
-dnl  Copyright 2004, 2005, 2007-2010, 2012 Free Software Foundation, Inc.
+dnl  Copyright 2004, 2005, 2007-2010, 2012, 2014 Free Software Foundation, Inc.
 
 dnl  This file is part of the GNU MP Library.
 dnl
@@ -138,9 +138,14 @@
 IFSTD(`	push	%rdi		')
 IFSTD(`	push	%rsi		')
 	push	%r8
+IFSTD(`	sub	$8, %rsp	')
 IFSTD(`	mov	d, %rdi		')
+IFDOS(`	sub	$40, %rsp	')
 IFDOS(`	mov	d, %rcx		')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 	pop	%r8
 IFSTD(`	pop	%rsi		')
 IFSTD(`	pop	%rdi		')
@@ -150,6 +155,7 @@
 	mov	%rbp, %rax
 	test	un, un
 	je	L(frac)
+
 L(ent):	mov	-8(up,un,8), %rbp
 	shr	R8(%rcx), %rax
 	shld	R8(%rcx), %rbp, %rax
diff -uNr gmp-6.0.0/mpn/x86_64/core2/gcd_1.asm gmp-6.0.0.fink/mpn/x86_64/core2/gcd_1.asm
--- gmp-6.0.0/mpn/x86_64/core2/gcd_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/core2/gcd_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -108,12 +108,14 @@
 IFDOS(`	mov	%rdx, %r8	')
 IFDOS(`	mov	%rsi, %rdx	')
 IFDOS(`	mov	%rdi, %rcx	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_mod_1)
 	jmp	L(reduced)
 L(bmod):
 IFDOS(`	mov	%rdx, %r8	')
 IFDOS(`	mov	%rsi, %rdx	')
 IFDOS(`	mov	%rdi, %rcx	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_modexact_1_odd)
 L(reduced):
 
diff -uNr gmp-6.0.0/mpn/x86_64/core2/redc_1.asm gmp-6.0.0.fink/mpn/x86_64/core2/redc_1.asm
--- gmp-6.0.0/mpn/x86_64/core2/redc_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/core2/redc_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -280,7 +280,12 @@
 	mov	n, %r9			C param 4: n
 	mov	rp, %rcx	')	C param 1: rp
 
+IFSTD(`	sub	$8, %rsp	')
+IFDOS(`	sub	$40, %rsp	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_add_n)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 
 L(ret):	pop	%r15
 	pop	%r14
diff -uNr gmp-6.0.0/mpn/x86_64/coreihwl/redc_1.asm gmp-6.0.0.fink/mpn/x86_64/coreihwl/redc_1.asm
--- gmp-6.0.0/mpn/x86_64/coreihwl/redc_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/coreihwl/redc_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -409,7 +409,7 @@
 
 L(cj):
 IFSTD(`	mov	8(%rsp), %rdi		C param 1: rp
-	lea	16(%rsp), %rsp		C deallocate two slots
+	lea	16-8(%rsp), %rsp	C deallocate 2, add back for alignment
 	lea	(up,n,8), %rdx		C param 3: up - n
 	neg	R32(n)		')	C param 4: n
 
@@ -418,10 +418,14 @@
 	neg	R32(n)
 	mov	n, %r9			C param 4: n
 	mov	8(%rsp), %rcx		C param 1: rp
-	lea	16(%rsp), %rsp	')	C deallocate two slots
+	lea	16-32-8(%rsp), %rsp')	C deallocate 2, allocate shadow, align
 
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_add_n)
 
+IFSTD(`	lea	8(%rsp), %rsp	')
+IFDOS(`	lea	32+8(%rsp), %rsp')
+
 L(ret):	pop	%r15
 	pop	%r14
 	pop	%r13
diff -uNr gmp-6.0.0/mpn/x86_64/coreinhm/redc_1.asm gmp-6.0.0.fink/mpn/x86_64/coreinhm/redc_1.asm
--- gmp-6.0.0/mpn/x86_64/coreinhm/redc_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/coreinhm/redc_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -276,7 +276,12 @@
 	mov	n, %r9			C param 4: n
 	mov	rp, %rcx	')	C param 1: rp
 
+IFSTD(`	sub	$8, %rsp	')
+IFDOS(`	sub	$40, %rsp	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_add_n)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 
 L(ret):	pop	%r15
 	pop	%r14
diff -uNr gmp-6.0.0/mpn/x86_64/coreisbr/redc_1.asm gmp-6.0.0.fink/mpn/x86_64/coreisbr/redc_1.asm
--- gmp-6.0.0/mpn/x86_64/coreisbr/redc_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/coreisbr/redc_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -282,7 +282,12 @@
 	mov	n, %r9			C param 4: n
 	mov	rp, %rcx	')	C param 1: rp
 
+IFSTD(`	sub	$8, %rsp	')
+IFDOS(`	sub	$40, %rsp	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_add_n)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 
 L(ret):	pop	%r15
 	pop	%r14
diff -uNr gmp-6.0.0/mpn/x86_64/divrem_1.asm gmp-6.0.0.fink/mpn/x86_64/divrem_1.asm
--- gmp-6.0.0/mpn/x86_64/divrem_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/divrem_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -1,6 +1,6 @@
 dnl  x86-64 mpn_divrem_1 -- mpn by limb division.
 
-dnl  Copyright 2004, 2005, 2007-2012 Free Software Foundation, Inc.
+dnl  Copyright 2004, 2005, 2007-2012, 2014 Free Software Foundation, Inc.
 
 dnl  This file is part of the GNU MP Library.
 dnl
@@ -140,8 +140,11 @@
 IFSTD(`	push	%rsi		')
 	push	%r8
 IFSTD(`	mov	d, %rdi		')
+IFDOS(`	sub	$32, %rsp	')
 IFDOS(`	mov	d, %rcx		')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
+IFDOS(`	add	$32, %rsp	')
 	pop	%r8
 IFSTD(`	pop	%rsi		')
 IFSTD(`	pop	%rdi		')
@@ -173,7 +176,7 @@
 	jns	L(ntop)			C
 
 	xor	R32(%rcx), R32(%rcx)
-	jmp	L(87)
+	jmp	L(frac)
 
 L(nfx):	sub	d, %rax
 	inc	%r13
@@ -200,9 +203,14 @@
 IFSTD(`	push	%rdi		')
 IFSTD(`	push	%rsi		')
 	push	%r8
+IFSTD(`	sub	$8, %rsp	')
 IFSTD(`	mov	d, %rdi		')
+IFDOS(`	sub	$40, %rsp	')
 IFDOS(`	mov	d, %rcx		')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
+IFSTD(`	add	$8, %rsp	')
+IFDOS(`	add	$40, %rsp	')
 	pop	%r8
 IFSTD(`	pop	%rsi		')
 IFSTD(`	pop	%rdi		')
@@ -211,7 +219,7 @@
 	mov	%rax, dinv
 	mov	%rbp, %rax
 	test	un, un
-	je	L(87)
+	je	L(frac)
 
 L(uent):dec	un
 	mov	(up,un,8), %rbp
@@ -266,7 +274,7 @@
 	jae	L(efx)
 L(eok):	mov	%r13, (qp)
 	sub	$8, qp
-	jmp	L(87)
+	jmp	L(frac)
 
 L(ufx):	sub	d, %rax
 	inc	%r13
@@ -275,7 +283,7 @@
 	inc	%r13
 	jmp	L(eok)
 
-L(87):	mov	d, %rbp
+L(frac):mov	d, %rbp
 	neg	%rbp
 	jmp	L(fent)
 
diff -uNr gmp-6.0.0/mpn/x86_64/divrem_2.asm gmp-6.0.0.fink/mpn/x86_64/divrem_2.asm
--- gmp-6.0.0/mpn/x86_64/divrem_2.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/divrem_2.asm	2014-07-04 00:20:03.000000000 -0400
@@ -1,6 +1,6 @@
 dnl  x86-64 mpn_divrem_2 -- Divide an mpn number by a normalized 2-limb number.
 
-dnl  Copyright 2007, 2008, 2010 Free Software Foundation, Inc.
+dnl  Copyright 2007, 2008, 2010, 2014 Free Software Foundation, Inc.
 
 dnl  This file is part of the GNU MP Library.
 dnl
@@ -100,6 +100,7 @@
 	push	%r11
 IFSTD(`	mov	%r11, %rdi	')
 IFDOS(`	mov	%r11, %rcx	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
 	pop	%r11
 	pop	%r10
diff -uNr gmp-6.0.0/mpn/x86_64/gcd_1.asm gmp-6.0.0.fink/mpn/x86_64/gcd_1.asm
--- gmp-6.0.0/mpn/x86_64/gcd_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/gcd_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -112,6 +112,7 @@
 IFDOS(`	mov	%rdx, %r8	')
 IFDOS(`	mov	%rsi, %rdx	')
 IFDOS(`	mov	%rdi, %rcx	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_modexact_1_odd)
 
 L(reduced):
@@ -134,6 +135,7 @@
 IFDOS(`	mov	%rdx, %r8	')
 IFDOS(`	mov	%rsi, %rdx	')
 IFDOS(`	mov	%rdi, %rcx	')
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_mod_1)
 	jmp	L(reduced)
 
diff -uNr gmp-6.0.0/mpn/x86_64/mod_1_1.asm gmp-6.0.0.fink/mpn/x86_64/mod_1_1.asm
--- gmp-6.0.0/mpn/x86_64/mod_1_1.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/mod_1_1.asm	2014-07-04 00:20:03.000000000 -0400
@@ -2,7 +2,7 @@
 
 dnl  Contributed to the GNU project by Torbjörn Granlund and Niels Möller.
 
-dnl  Copyright 2009-2012 Free Software Foundation, Inc.
+dnl  Copyright 2009-2012, 2014 Free Software Foundation, Inc.
 
 dnl  This file is part of the GNU MP Library.
 dnl
@@ -198,6 +198,7 @@
 	sal	R8(%rcx), %r12
 IFSTD(`	mov	%r12, %rdi	')	C pass parameter
 IFDOS(`	mov	%r12, %rcx	')	C pass parameter
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
 	neg	%r12
 	mov	%r12, %r8
diff -uNr gmp-6.0.0/mpn/x86_64/mod_1_2.asm gmp-6.0.0.fink/mpn/x86_64/mod_1_2.asm
--- gmp-6.0.0/mpn/x86_64/mod_1_2.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/mod_1_2.asm	2014-07-04 00:20:03.000000000 -0400
@@ -2,7 +2,7 @@
 
 dnl  Contributed to the GNU project by Torbjorn Granlund.
 
-dnl  Copyright 2009-2012 Free Software Foundation, Inc.
+dnl  Copyright 2009-2012, 2014 Free Software Foundation, Inc.
 
 dnl  This file is part of the GNU MP Library.
 dnl
@@ -183,6 +183,7 @@
 	sal	R8(%rcx), %r12		C b << cnt
 IFSTD(`	mov	%r12, %rdi	')	C pass parameter
 IFDOS(`	mov	%r12, %rcx	')	C pass parameter
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
 	mov	%r12, %r8
 	mov	%rax, %r11
diff -uNr gmp-6.0.0/mpn/x86_64/mod_1_4.asm gmp-6.0.0.fink/mpn/x86_64/mod_1_4.asm
--- gmp-6.0.0/mpn/x86_64/mod_1_4.asm	2014-03-25 10:37:55.000000000 -0400
+++ gmp-6.0.0.fink/mpn/x86_64/mod_1_4.asm	2014-07-04 00:20:03.000000000 -0400
@@ -2,7 +2,7 @@
 
 dnl  Contributed to the GNU project by Torbjorn Granlund.
 
-dnl  Copyright 2009-2012 Free Software Foundation, Inc.
+dnl  Copyright 2009-2012, 2014 Free Software Foundation, Inc.
 
 dnl  This file is part of the GNU MP Library.
 dnl
@@ -190,6 +190,7 @@
 	sal	R8(%rcx), %r12		C b << cnt
 IFSTD(`	mov	%r12, %rdi	')	C pass parameter
 IFDOS(`	mov	%r12, %rcx	')	C pass parameter
+	ASSERT(nz, `test $15, %rsp')
 	CALL(	mpn_invert_limb)
 	mov	%r12, %r8
 	mov	%rax, %r11
diff -uNr gmp-6.0.0.orig/aclocal.m4 gmp-6.0.0/aclocal.m4
--- gmp-6.0.0.orig/aclocal.m4	2014-03-25 10:38:00.000000000 -0400
+++ gmp-6.0.0/aclocal.m4	2014-10-26 01:08:59.000000000 -0400
@@ -1066,7 +1066,7 @@
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
 	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[[012]]*)
+	10.[[012]][[,.]]*)
 	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
 	10.*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
diff -uNr gmp-6.0.0.orig/configure gmp-6.0.0/configure
--- gmp-6.0.0.orig/configure	2014-03-25 10:38:04.000000000 -0400
+++ gmp-6.0.0/configure	2014-10-26 01:08:59.000000000 -0400
@@ -14809,7 +14809,7 @@
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
 	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
-	10.[012]*)
+	10.[012][,.]*)
 	  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
 	10.*)
 	  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
libmpfr4.info (application/octet-stream, 2.9 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.