|
@@ -1,76 +0,0 @@
|
|
|
-From 0ce17bae34a6c54de31b126f969d3ddd72c6bc37 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
|
|
|
----
|
|
|
- src/mpfr.h | 2 +-
|
|
|
- tests/tstckintc.c | 10 +++++++---
|
|
|
- 2 files changed, 8 insertions(+), 4 deletions(-)
|
|
|
-
|
|
|
---- a/src/mpfr.h
|
|
|
-+++ b/src/mpfr.h
|
|
|
-@@ -1027,7 +1027,7 @@ __MPFR_DECLSPEC int mpfr_total_order_p (
|
|
|
- #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. */
|