commit:     bb48158fa851ab5f552b125de478a60b5bef65f7
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Nov 22 18:49:54 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Nov 22 18:50:03 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bb48158f

dev-libs/mpfr: backport mpfr_custom_get_kind macro fix

Closes: https://bugs.gentoo.org/881995
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../mpfr-4.1.1-fix-mpfr_custom_get_kind.patch      | 79 ++++++++++++++++++++++
 .../{mpfr-4.1.1.ebuild => mpfr-4.1.1-r1.ebuild}    |  1 +
 2 files changed, 80 insertions(+)

diff --git a/dev-libs/mpfr/files/mpfr-4.1.1-fix-mpfr_custom_get_kind.patch 
b/dev-libs/mpfr/files/mpfr-4.1.1-fix-mpfr_custom_get_kind.patch
new file mode 100644
index 000000000000..d2521f2fa632
--- /dev/null
+++ b/dev-libs/mpfr/files/mpfr-4.1.1-fix-mpfr_custom_get_kind.patch
@@ -0,0 +1,79 @@
+https://bugs.gentoo.org/881995
+https://gitlab.inria.fr/mpfr/mpfr/-/commit/3cd39bc0b71ad2fb2ab5252ad9268b14603e3ce6
+https://gitlab.inria.fr/mpfr/mpfr/-/issues/1
+https://github.com/CGAL/cgal/issues/7064
+
+From 3cd39bc0b71ad2fb2ab5252ad9268b14603e3ce6 Mon Sep 17 00:00:00 2001
+From: Vincent Lefevre <[email protected]>
+Date: Tue, 22 Nov 2022 16:33:00 +0100
+Subject: [PATCH] Fix mpfr_custom_get_kind() macro bug.
+
+* src/mpfr.h: in the mpfr_custom_get_kind() macro, changed mpfr_ptr to
+  mpfr_srcptr for _x to agree with the function prototype, in order to
+  avoid a compilation failure of user code in some cases. This bug was
+  introduced by commit 9f94e0311ed53d0c64d4fbca249d19cc4888027e, which
+  introduced the temporary variable _x to avoid an incorrect number of
+  evaluations of the x argument.
+* tests/tstckintc.c: improved the tests to detect this bug.
+
+This should fix mpfr bug #1.
+
+Bug initially reported by FX Coudert:
+  https://github.com/CGAL/cgal/issues/7064
+
+It affects Fedora Linux:
+  https://bugzilla.redhat.com/show_bug.cgi?id=2144197
+
+(cherry picked from commit 0ce17bae34a6c54de31b126f969d3ddd72c6bc37)
+--- a/src/mpfr.h
++++ b/src/mpfr.h
+@@ -1027,7 +1027,7 @@ __MPFR_DECLSPEC int mpfr_total_order_p (mpfr_srcptr, 
mpfr_srcptr);
+ #if __GNUC__ > 2 || __GNUC_MINOR__ >= 95
+ #define mpfr_custom_get_kind(x)                                         \
+   __extension__ ({                                                      \
+-    mpfr_ptr _x = (x);                                                  \
++    mpfr_srcptr _x = (x);                                               \
+     _x->_mpfr_exp >  __MPFR_EXP_INF ?                                   \
+       (mpfr_int) MPFR_REGULAR_KIND * MPFR_SIGN (_x)                     \
+       : _x->_mpfr_exp == __MPFR_EXP_INF ?                               \
+--- a/tests/tstckintc.c
++++ b/tests/tstckintc.c
+@@ -295,14 +295,16 @@ static void
+ test_nan_inf_zero (void)
+ {
+   mpfr_ptr val;
++  mpfr_srcptr sval;  /* for compilation error checking */
+   int sign;
+   int kind;
+ 
+   reset_stack ();
+ 
+   val = new_mpfr (MPFR_PREC_MIN);
++  sval = val;
+   mpfr_set_nan (val);
+-  kind = (mpfr_custom_get_kind) (val);
++  kind = (mpfr_custom_get_kind) (sval);
+   if (kind != MPFR_NAN_KIND)
+     {
+       printf ("mpfr_custom_get_kind error: ");
+@@ -380,7 +382,8 @@ static long *
+ dummy_set_si (long si)
+ {
+   mpfr_t x;
+-  long * r = dummy_new ();
++  mpfr_srcptr px;  /* for compilation error checking */
++  long *r = dummy_new ();
+   int i1, i2, i3, i4, i5;
+ 
+   /* Check that the type "void *" can be used, like with the function.
+@@ -405,7 +408,8 @@ dummy_set_si (long si)
+   MPFR_ASSERTN (i5 == 1);
+ 
+   mpfr_set_si (x, si, MPFR_RNDN);
+-  r[0] = mpfr_custom_get_kind (x);
++  px = x;
++  r[0] = mpfr_custom_get_kind (px);
+ 
+   /* Check that the type "void *" can be used in C, like with the function
+      (forbidden in C++). Also check side effects. */
+GitLab

diff --git a/dev-libs/mpfr/mpfr-4.1.1.ebuild 
b/dev-libs/mpfr/mpfr-4.1.1-r1.ebuild
similarity index 98%
rename from dev-libs/mpfr/mpfr-4.1.1.ebuild
rename to dev-libs/mpfr/mpfr-4.1.1-r1.ebuild
index 13392ae4cf60..e34c78ab5b44 100644
--- a/dev-libs/mpfr/mpfr-4.1.1.ebuild
+++ b/dev-libs/mpfr/mpfr-4.1.1-r1.ebuild
@@ -47,6 +47,7 @@ PATCHES=(
        "${MY_PATCHES[@]}"
 
        # Additional patches
+       "${FILESDIR}"/${P}-fix-mpfr_custom_get_kind.patch
 )
 
 HTML_DOCS=( doc/FAQ.html )

Reply via email to