diff -Naurd mpfr-4.2.0-a/PATCHES mpfr-4.2.0-b/PATCHES
--- mpfr-4.2.0-a/PATCHES	2023-05-12 15:06:11.789722083 +0000
+++ mpfr-4.2.0-b/PATCHES	2023-05-12 15:06:11.885721962 +0000
@@ -0,0 +1 @@
+tests-reuse
diff -Naurd mpfr-4.2.0-a/VERSION mpfr-4.2.0-b/VERSION
--- mpfr-4.2.0-a/VERSION	2023-05-12 15:05:01.085811835 +0000
+++ mpfr-4.2.0-b/VERSION	2023-05-12 15:06:11.885721962 +0000
@@ -1 +1 @@
-4.2.0-p5
+4.2.0-p6
diff -Naurd mpfr-4.2.0-a/src/mpfr.h mpfr-4.2.0-b/src/mpfr.h
--- mpfr-4.2.0-a/src/mpfr.h	2023-05-12 15:05:01.077811846 +0000
+++ mpfr-4.2.0-b/src/mpfr.h	2023-05-12 15:06:11.877721972 +0000
@@ -27,7 +27,7 @@
 #define MPFR_VERSION_MAJOR 4
 #define MPFR_VERSION_MINOR 2
 #define MPFR_VERSION_PATCHLEVEL 0
-#define MPFR_VERSION_STRING "4.2.0-p5"
+#define MPFR_VERSION_STRING "4.2.0-p6"
 
 /* User macros:
    MPFR_USE_FILE:        Define it to make MPFR define functions dealing
diff -Naurd mpfr-4.2.0-a/src/version.c mpfr-4.2.0-b/src/version.c
--- mpfr-4.2.0-a/src/version.c	2023-05-12 15:05:01.081811839 +0000
+++ mpfr-4.2.0-b/src/version.c	2023-05-12 15:06:11.885721962 +0000
@@ -25,5 +25,5 @@
 const char *
 mpfr_get_version (void)
 {
-  return "4.2.0-p5";
+  return "4.2.0-p6";
 }
diff -Naurd mpfr-4.2.0-a/tests/reuse.c mpfr-4.2.0-b/tests/reuse.c
--- mpfr-4.2.0-a/tests/reuse.c	2023-01-05 17:09:48.000000000 +0000
+++ mpfr-4.2.0-b/tests/reuse.c	2023-05-12 15:06:11.869721983 +0000
@@ -78,22 +78,16 @@
       mpfr_const_pi (x, MPFR_RNDN);
       MPFR_SET_EXP (x, MPFR_GET_EXP (x)-1);
       break;
-    default:
+    case 11:
       mpfr_urandomb (x, RANDS);
       if (RAND_BOOL ())
         mpfr_neg (x, x, MPFR_RNDN);
       break;
+    default:
+      MPFR_ASSERTN (0);
     }
 }
 
-/* same as mpfr_cmp, but returns 0 for both NaN's */
-static int
-mpfr_compare (mpfr_srcptr a, mpfr_srcptr b)
-{
-  return (MPFR_IS_NAN(a)) ? !MPFR_IS_NAN(b) :
-    (MPFR_IS_NAN(b) || mpfr_cmp(a, b));
-}
-
 static void
 test3 (int (*testfunc)(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t),
        const char *foo, mpfr_prec_t prec, mpfr_rnd_t rnd)
@@ -112,10 +106,10 @@
 
   /* for each variable, consider each of the following 6 possibilities:
      NaN, +Infinity, -Infinity, +0, -0 or a random number */
-  for (i=0; i < SPECIAL_MAX*SPECIAL_MAX ; i++)
+  for (i = 0; i < SPECIAL_MAX * SPECIAL_MAX; i++)
     {
-      set_special (ref2, i%SPECIAL_MAX);
-      set_special (ref3, i/SPECIAL_MAX);
+      set_special (ref2, i % SPECIAL_MAX);
+      set_special (ref3, i / SPECIAL_MAX);
 
       /* reference call: foo(a, b, c) */
       testfunc (ref1, ref2, ref3, rnd);
@@ -124,11 +118,11 @@
       mpfr_set (res1, ref2, rnd); /* exact operation */
       testfunc (res1, res1, ref3, rnd);
 
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, a, c) with %s for ", foo,
                   mpfr_print_rnd_mode (rnd));
-          DISP("a=",ref2); DISP2(", c=",ref3);
+          DISP("a=", ref2); DISP2(", c=", ref3);
           printf ("expected "); mpfr_dump (ref1);
           printf ("got      "); mpfr_dump (res1);
           exit (1);
@@ -137,11 +131,12 @@
       /* foo(a, b, a) */
       mpfr_set (res1, ref3, rnd);
       testfunc (res1, ref2, res1, rnd);
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, b, a) for ", foo);
-          DISP("b=",ref2); DISP2(", a=", ref3);
-          DISP("expected ", ref1); DISP2(", got ",res1);
+          DISP("b=", ref2); DISP2(", a=", ref3);
+          printf ("expected "); mpfr_dump (ref1);
+          printf ("got      "); mpfr_dump (res1);
           exit (1);
         }
 
@@ -151,11 +146,12 @@
       mpfr_set (res1, ref2, rnd);
       testfunc (res1, res1, res1, rnd);
 
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, a, a) for ", foo);
-          DISP2("a=",ref2);
-          DISP("expected ", ref1); DISP2(", got ", res1);
+          DISP2("a=", ref2);
+          printf ("expected "); mpfr_dump (ref1);
+          printf ("got      "); mpfr_dump (res1);
           exit (1);
         }
     }
@@ -187,13 +183,13 @@
   /* for each variable, consider each of the following 6 possibilities:
      NaN, +Infinity, -Infinity, +0, -0 or a random number */
 
-  for (i=0; i<SPECIAL_MAX; i++)
+  for (i = 0; i < SPECIAL_MAX; i++)
     {
       set_special (op1, i);
-      for (j=0; j<SPECIAL_MAX; j++)
+      for (j = 0; j < SPECIAL_MAX; j++)
         {
           set_special (op2, j);
-          for (k=0; k<SPECIAL_MAX; k++)
+          for (k = 0; k < SPECIAL_MAX; k++)
             {
               set_special (op3, k);
 
@@ -204,11 +200,12 @@
               mpfr_set (res, op1, rnd); /* exact operation */
               testfunc (res, res, op2, op3, rnd);
 
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, b, c) for ", foo);
                   DISP("a=", op1); DISP(", b=", op2); DISP2(", c=", op3);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
 
@@ -216,11 +213,12 @@
               mpfr_set (res, op2, rnd);
               testfunc (res, op1, res, op3, rnd);
 
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, b, c) for ", foo);
                   DISP("a=", op1); DISP(", b=", op2); DISP2(", c=", op3);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
 
@@ -228,35 +226,38 @@
               mpfr_set (res, op3, rnd);
               testfunc (res, op1, op2, res, rnd);
 
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, b, c) for ", foo);
                   DISP("a=", op1); DISP(", b=", op2); DISP2(", c=", op3);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
 
-              /* foo(a, a, a,c) */
+              /* foo(a, a, a, c) */
               testfunc (ref, op1, op1, op3, rnd);
               mpfr_set (res, op1, rnd);
               testfunc (res, res, res, op3, rnd);
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, b, c) for ", foo);
                   DISP("a=", op1); DISP(", a=", op2); DISP2(", c=", op3);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
 
-              /* foo(a, a, b,a) */
+              /* foo(a, a, b, a) */
               testfunc (ref, op1, op2, op1, rnd);
               mpfr_set (res, op1, rnd);
               testfunc (res, res, op2, res, rnd);
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, b, c) for ", foo);
                   DISP("a=", op1); DISP(", a=", op2); DISP2(", c=", op3);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
 
@@ -264,11 +265,12 @@
               testfunc (ref, op1, op2, op2, rnd);
               mpfr_set (res, op2, rnd);
               testfunc (res, op1, res, res, rnd);
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, b, c) for ", foo);
                   DISP("a=", op1); DISP(", a=", op2); DISP2(", c=", op3);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
 
@@ -276,11 +278,12 @@
               testfunc (ref, op1, op1, op1, rnd);
               mpfr_set (res, op1, rnd);
               testfunc (res, res, res, res, rnd);
-              if (mpfr_compare (res, ref))
+              if (! SAME_VAL (res, ref))
                 {
                   printf ("Error for %s(a, a, a, a) for ", foo);
                   DISP2("a=", op1);
-                  DISP("expected ", ref); DISP2(", got ", res);
+                  printf ("expected "); mpfr_dump (ref);
+                  printf ("got      "); mpfr_dump (res);
                   exit (1);
                 }
             }
@@ -313,10 +316,10 @@
 
   /* ref2 can be NaN, +Inf, -Inf, +0, -0 or any number
      ref3 can be 0 or any number */
-  for (i=0; i<SPECIAL_MAX*2; i++)
+  for (i = 0; i < SPECIAL_MAX * 2; i++)
     {
-      set_special (ref2, i%SPECIAL_MAX);
-      ref3 = i/SPECIAL_MAX == 0 ? 0 : randlimb ();
+      set_special (ref2, i % SPECIAL_MAX);
+      ref3 = i / SPECIAL_MAX == 0 ? 0 : randlimb ();
 
       /* reference call: foo(a, b, c) */
       testfunc (ref1, ref2, ref3, rnd);
@@ -325,10 +328,10 @@
       mpfr_set (res1, ref2, rnd); /* exact operation */
       testfunc (res1, res1, ref3, rnd);
 
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, a, c) for c=%u\n", foo, ref3);
-          DISP2("a=",ref2);
+          DISP2("a=", ref2);
           printf ("expected "); mpfr_dump (ref1);
           printf ("got      "); mpfr_dump (res1);
           exit (1);
@@ -356,10 +359,10 @@
   mpfr_init2 (ref3, prec);
   mpfr_init2 (res1, prec);
 
-  for (i=0; i<SPECIAL_MAX*2; i++)
+  for (i = 0; i < SPECIAL_MAX * 2; i++)
     {
-      set_special (ref3, i%SPECIAL_MAX);
-      ref2 = i/SPECIAL_MAX==0 ? 0 : randlimb ();
+      set_special (ref3, i % SPECIAL_MAX);
+      ref2 = i / SPECIAL_MAX == 0 ? 0 : randlimb ();
 
       /* reference call: foo(a, b, c) */
       testfunc (ref1, ref2, ref3, rnd);
@@ -367,7 +370,7 @@
       /* foo(a, b, a) */
       mpfr_set (res1, ref3, rnd); /* exact operation */
       testfunc (res1, ref2, res1, rnd);
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, b, a) for b=%u \n", foo, ref2);
           DISP2("a=", ref3);
@@ -397,7 +400,7 @@
   mpfr_init2 (ref2, prec);
   mpfr_init2 (res1, prec);
 
-  for (i=0; i<SPECIAL_MAX; i++)
+  for (i = 0; i < SPECIAL_MAX; i++)
     {
       set_special (ref2, i);
 
@@ -407,7 +410,7 @@
       /* foo(a, a) */
       mpfr_set (res1, ref2, rnd); /* exact operation */
       testfunc (res1, res1, rnd);
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, a) for ", foo);
           DISP2("a=", ref2);
@@ -437,7 +440,7 @@
   mpfr_init2 (ref2, prec);
   mpfr_init2 (res1, prec);
 
-  for (i=0; i<SPECIAL_MAX; i++)
+  for (i = 0; i < SPECIAL_MAX; i++)
     {
       set_special (ref2, i);
 
@@ -447,10 +450,10 @@
       /* foo(a, a) */
       mpfr_set (res1, ref2, MPFR_RNDN); /* exact operation */
       testfunc (res1, res1);
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for %s(a, a) for ", foo);
-          DISP2("a=",ref2);
+          DISP2("a=", ref2);
           DISP("expected", ref1); DISP2(", got ", res1);
           exit (1);
         }
@@ -479,7 +482,7 @@
   mpfr_init2 (res1, prec);
   mpfr_init2 (res2, prec);
 
-  for (i=0; i<SPECIAL_MAX; i++)
+  for (i = 0; i < SPECIAL_MAX; i++)
     {
       set_special (ref3, i);
 
@@ -489,12 +492,12 @@
       /* foo(a, b, a) */
       mpfr_set (res1, ref3, rnd); /* exact operation */
       testfunc (res1, res2, res1, rnd);
-      if (mpfr_compare (res1, ref1) || mpfr_compare (res2, ref2))
+      if (! SAME_VAL (res1, ref1) || ! SAME_VAL (res2, ref2))
         {
           printf ("Error for %s(a, b, a) for rnd=%s, ", foo,
                   mpfr_print_rnd_mode (rnd));
-          DISP2("a=",ref3);
-          DISP("expected (", ref1); DISP(",",ref2);
+          DISP2("a=", ref3);
+          DISP("expected (", ref1); DISP(",", ref2);
           DISP("), got (", res1); DISP(",", res2); printf(")\n");
           exit (1);
         }
@@ -502,11 +505,11 @@
       /* foo(a, b, b) */
       mpfr_set (res2, ref3, rnd); /* exact operation */
       testfunc (res1, res2, res2, rnd);
-      if (mpfr_compare (res1, ref1) || mpfr_compare (res2, ref2))
+      if (! SAME_VAL (res1, ref1) || ! SAME_VAL (res2, ref2))
         {
           printf ("Error for %s(a, b, b) for ", foo);
-          DISP2("b=",ref3);
-          DISP("expected (", ref1); DISP(",",ref2);
+          DISP2("b=", ref3);
+          DISP("expected (", ref1); DISP(",", ref2);
           DISP("), got (", res1); DISP(",", res2); printf(")\n");
           exit (1);
         }
@@ -561,10 +564,10 @@
       mpfr_set (res1, ref2, rnd); /* exact operation */
       mpfr_pow (res1, res1, ref3, rnd);
 
-      if (mpfr_compare (res1, ref1))
+      if (! SAME_VAL (res1, ref1))
         {
           printf ("Error for pow_int(a, a, c) for ");
-          DISP("a=",ref2); DISP2(", c=",ref3);
+          DISP("a=", ref2); DISP2(", c=", ref3);
           printf ("expected "); mpfr_dump (ref1);
           printf ("got      "); mpfr_dump (res1);
           exit (1);
