414 lines
13 KiB
Diff
414 lines
13 KiB
Diff
From e944aa454e60cbff8ab4e8c70dd974083398378f Mon Sep 17 00:00:00 2001
|
|
From: Paul Zimmermann <Paul.Zimmermann@inria.fr>
|
|
Date: Sat, 10 Dec 2022 08:47:51 +0100
|
|
Subject: [PATCH 1/6] functions with FILE arguments should be defined only when
|
|
stdio.h is included
|
|
|
|
---
|
|
src/mpc.h | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/mpc.h b/src/mpc.h
|
|
index bb1334f..31c7990 100644
|
|
--- a/src/mpc.h
|
|
+++ b/src/mpc.h
|
|
@@ -270,6 +270,7 @@ __MPC_DECLSPEC long double _Complex mpc_get_ldc (mpc_srcptr, mpc_rnd_t);
|
|
__MPC_DECLSPEC int mpc_inp_str (mpc_ptr, FILE *, size_t *, int, mpc_rnd_t);
|
|
__MPC_DECLSPEC size_t mpc_out_str (FILE *, int, size_t, mpc_srcptr, mpc_rnd_t);
|
|
__MPC_DECLSPEC void mpcb_out_str (FILE *f, mpcb_srcptr);
|
|
+__MPC_DECLSPEC void mpcr_out_str (FILE *f, mpcr_srcptr r);
|
|
#endif
|
|
|
|
__MPC_DECLSPEC int mpcr_inf_p (mpcr_srcptr r);
|
|
@@ -284,7 +285,6 @@ __MPC_DECLSPEC void mpcr_set_ui64_2si64 (mpcr_ptr r, uint64_t mant,
|
|
int64_t exp);
|
|
__MPC_DECLSPEC void mpcr_max (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
|
|
__MPC_DECLSPEC int64_t mpcr_get_exp (mpcr_srcptr r);
|
|
-__MPC_DECLSPEC void mpcr_out_str (FILE *f, mpcr_srcptr r);
|
|
__MPC_DECLSPEC void mpcr_mul (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t);
|
|
__MPC_DECLSPEC void mpcr_mul_2ui (mpcr_ptr r, mpcr_srcptr s,
|
|
unsigned long int e);
|
|
--
|
|
2.39.0
|
|
|
|
From c4ecee561ca9f93ee13e4d6295af8adc77e50208 Mon Sep 17 00:00:00 2001
|
|
From: Paul Zimmermann <Paul.Zimmermann@inria.fr>
|
|
Date: Mon, 12 Dec 2022 10:42:12 +0100
|
|
Subject: [PATCH 2/6] added test for case when stdio.h is not included
|
|
|
|
---
|
|
src/mpc-impl.h | 2 ++
|
|
tests/Makefile.am | 2 +-
|
|
tests/mpc-tests.h | 2 ++
|
|
tests/tdummy.c | 33 +++++++++++++++++++++++++++++++++
|
|
4 files changed, 38 insertions(+), 1 deletion(-)
|
|
create mode 100644 tests/tdummy.c
|
|
|
|
diff --git a/src/mpc-impl.h b/src/mpc-impl.h
|
|
index 2b7bbb2..a915751 100644
|
|
--- a/src/mpc-impl.h
|
|
+++ b/src/mpc-impl.h
|
|
@@ -27,7 +27,9 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
#ifdef HAVE_STDLIB_H
|
|
#include <stdlib.h>
|
|
#endif
|
|
+#ifndef DONT_INCLUDE_STDIO
|
|
#include <stdio.h>
|
|
+#endif
|
|
#include "mpc.h"
|
|
|
|
/*
|
|
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
index f488bdb..2fe0813 100644
|
|
--- a/tests/Makefile.am
|
|
+++ b/tests/Makefile.am
|
|
@@ -45,7 +45,7 @@ check_PROGRAMS = tradius tballs teta \
|
|
treimref trootofunity \
|
|
tset tsin tsin_cos tsinh tsqr tsqrt tstrtoc tsub tsub_fr \
|
|
tsub_ui tsum tswap ttan ttanh tui_div tui_ui_sub \
|
|
- tget_version texceptions
|
|
+ tget_version texceptions tdummy
|
|
|
|
check_LTLIBRARIES=libmpc-tests.la
|
|
libmpc_tests_la_SOURCES = mpc-tests.h check_data.c clear_parameters.c \
|
|
diff --git a/tests/mpc-tests.h b/tests/mpc-tests.h
|
|
index ecd10b7..57ac632 100644
|
|
--- a/tests/mpc-tests.h
|
|
+++ b/tests/mpc-tests.h
|
|
@@ -22,7 +22,9 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
#define __MPC_TESTS_H
|
|
|
|
#include "config.h"
|
|
+#ifndef DONT_INCLUDE_STDIO
|
|
#include <stdio.h>
|
|
+#endif
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <inttypes.h> /* for the PRIi64 format modifier */
|
|
diff --git a/tests/tdummy.c b/tests/tdummy.c
|
|
new file mode 100644
|
|
index 0000000..23072f5
|
|
--- /dev/null
|
|
+++ b/tests/tdummy.c
|
|
@@ -0,0 +1,33 @@
|
|
+/* tdummy -- test file when stdio.h is not included
|
|
+
|
|
+Copyright (C) 2022 INRIA
|
|
+
|
|
+This file is part of GNU MPC.
|
|
+
|
|
+GNU MPC is free software; you can redistribute it and/or modify it under
|
|
+the terms of the GNU Lesser General Public License as published by the
|
|
+Free Software Foundation; either version 3 of the License, or (at your
|
|
+option) any later version.
|
|
+
|
|
+GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
|
+more details.
|
|
+
|
|
+You should have received a copy of the GNU Lesser General Public License
|
|
+along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
+*/
|
|
+
|
|
+#define DONT_INCLUDE_STDIO
|
|
+#include "mpc-tests.h"
|
|
+
|
|
+int
|
|
+main (void)
|
|
+{
|
|
+ test_start ();
|
|
+
|
|
+ test_end ();
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
--
|
|
2.39.0
|
|
|
|
From 3c582150facc14230a157e927d07ff2398ab5f3e Mon Sep 17 00:00:00 2001
|
|
From: Paul Zimmermann <Paul.Zimmermann@inria.fr>
|
|
Date: Mon, 12 Dec 2022 10:55:05 +0100
|
|
Subject: [PATCH 3/6] fixed last commit
|
|
|
|
---
|
|
tests/mpc-tests.h | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/tests/mpc-tests.h b/tests/mpc-tests.h
|
|
index 57ac632..c6b5679 100644
|
|
--- a/tests/mpc-tests.h
|
|
+++ b/tests/mpc-tests.h
|
|
@@ -141,6 +141,7 @@ extern int same_mpc_value (mpc_ptr got, mpc_ptr ref,
|
|
known_signs_t known_signs);
|
|
|
|
/** READ FILE WITH TEST DATA SET **/
|
|
+#ifndef DONT_INCLUDE_STDIO
|
|
extern FILE * open_data_file (const char *file_name);
|
|
extern void close_data_file (FILE *fp);
|
|
|
|
@@ -155,6 +156,7 @@ extern size_t read_string (FILE *fp, char **buffer_ptr,
|
|
size_t buffer_length, const char *name);
|
|
extern void read_mpfr (FILE *fp, mpfr_ptr x, int *known_sign);
|
|
extern void read_mpc (FILE *fp, mpc_ptr z, known_signs_t *ks);
|
|
+#endif
|
|
|
|
void set_mpfr_flags (int counter);
|
|
void check_mpfr_flags (int counter);
|
|
@@ -287,6 +289,7 @@ typedef struct {
|
|
void read_description (mpc_fun_param_t* param, const char *file);
|
|
const char* read_description_findname (mpc_param_t e);
|
|
|
|
+#ifndef DONT_INCLUDE_STDIO
|
|
/* file functions */
|
|
typedef struct {
|
|
char *pathname;
|
|
@@ -339,6 +342,7 @@ void tpl_read_mpc (mpc_datafile_context_t* datafile_context,
|
|
mpc_data_t* z);
|
|
void tpl_read_mpc_rnd (mpc_datafile_context_t* datafile_context,
|
|
mpc_rnd_t* rnd);
|
|
+#endif
|
|
|
|
int tpl_same_mpz_value (mpz_ptr n1, mpz_ptr n2);
|
|
int tpl_same_mpfr_value (mpfr_ptr x1, mpfr_ptr x2, int known_sign);
|
|
--
|
|
2.39.0
|
|
|
|
From 8cd19d81f3e2aebbd58d8204da8ada50e8e8dfc1 Mon Sep 17 00:00:00 2001
|
|
From: Andreas Enge <andreas.enge@inria.fr>
|
|
Date: Mon, 12 Dec 2022 11:23:40 +0100
|
|
Subject: [PATCH 4/6] Do not explicitly include stdio.h in mpc-impl.h.
|
|
|
|
Several files include it on their own for MPC_ASSERT.
|
|
|
|
* src/mpc-impl.h, src/radius.c: Do not include stdio.h.
|
|
* tests/teta.c: Include mpc-tests.h instead of mpc-impl.h.
|
|
* src/balls.c (mpcb_out_str, mpcr_out_str): Define only when
|
|
_GMP_H_HAVE_FILE is defined, in accordance with mpc.h.
|
|
* NEWS: Add entry for bug fix.
|
|
---
|
|
NEWS | 4 ++++
|
|
src/balls.c | 2 ++
|
|
src/mpc-impl.h | 3 ---
|
|
src/radius.c | 4 +++-
|
|
tests/teta.c | 2 +-
|
|
5 files changed, 10 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/NEWS b/NEWS
|
|
index ef6ff8b..c113262 100644
|
|
--- a/NEWS
|
|
+++ b/NEWS
|
|
@@ -1,3 +1,7 @@
|
|
+Changes in version 1.3.1, released in December 2022:
|
|
+ - Bug fix: It is again possible to include mpc.h without including
|
|
+ stdio.h.
|
|
+
|
|
Changes in version 1.3.0 ("Ipomoea batatas"), released in December 2022:
|
|
- New function: mpc_agm
|
|
- New rounding modes "away from zero", indicated by the letter "A" and
|
|
diff --git a/src/balls.c b/src/balls.c
|
|
index ecaecd5..03a44a8 100644
|
|
--- a/src/balls.c
|
|
+++ b/src/balls.c
|
|
@@ -21,6 +21,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
#include "mpc-impl.h"
|
|
|
|
|
|
+#ifdef _GMP_H_HAVE_FILE
|
|
void mpcb_out_str (FILE *f, mpcb_srcptr op)
|
|
{
|
|
mpc_out_str (f, 10, 0, op->c, MPC_RNDNN);
|
|
@@ -28,6 +29,7 @@ void mpcb_out_str (FILE *f, mpcb_srcptr op)
|
|
mpcr_out_str (f, op->r);
|
|
fprintf (f, "\n");
|
|
}
|
|
+#endif
|
|
|
|
|
|
void
|
|
diff --git a/src/mpc-impl.h b/src/mpc-impl.h
|
|
index a915751..3f46121 100644
|
|
--- a/src/mpc-impl.h
|
|
+++ b/src/mpc-impl.h
|
|
@@ -27,9 +27,6 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
#ifdef HAVE_STDLIB_H
|
|
#include <stdlib.h>
|
|
#endif
|
|
-#ifndef DONT_INCLUDE_STDIO
|
|
-#include <stdio.h>
|
|
-#endif
|
|
#include "mpc.h"
|
|
|
|
/*
|
|
diff --git a/src/radius.c b/src/radius.c
|
|
index 98ae8d5..88c7d71 100644
|
|
--- a/src/radius.c
|
|
+++ b/src/radius.c
|
|
@@ -18,7 +18,6 @@ You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
*/
|
|
|
|
-#include <stdio.h>
|
|
#include <math.h>
|
|
#include <inttypes.h> /* for the PRIi64 format modifier */
|
|
#include "mpc-impl.h"
|
|
@@ -405,6 +404,8 @@ int64_t mpcr_get_exp (mpcr_srcptr r)
|
|
return MPCR_EXP (r) + 31;
|
|
}
|
|
|
|
+
|
|
+#ifdef _GMP_H_HAVE_FILE
|
|
void mpcr_out_str (FILE *f, mpcr_srcptr r)
|
|
{
|
|
if (mpcr_inf_p (r))
|
|
@@ -415,6 +416,7 @@ void mpcr_out_str (FILE *f, mpcr_srcptr r)
|
|
fprintf (f, "±(%" PRIi64 ", %" PRIi64 ")", MPCR_MANT (r), MPCR_EXP (r));
|
|
}
|
|
}
|
|
+#endif
|
|
|
|
|
|
static void mpcr_mul_rnd (mpcr_ptr r, mpcr_srcptr s, mpcr_srcptr t,
|
|
diff --git a/tests/teta.c b/tests/teta.c
|
|
index 1154d66..a8bb317 100644
|
|
--- a/tests/teta.c
|
|
+++ b/tests/teta.c
|
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
*/
|
|
|
|
#include <math.h>
|
|
-#include "mpc-impl.h"
|
|
+#include "mpc-tests.h"
|
|
|
|
static void
|
|
mpcb_j_err (mpcb_ptr j, mpc_srcptr z, unsigned long int err_re,
|
|
--
|
|
2.39.0
|
|
|
|
From 2bf963605442b2693c7adc06f37957984e0ced56 Mon Sep 17 00:00:00 2001
|
|
From: Andreas Enge <andreas.enge@inria.fr>
|
|
Date: Mon, 12 Dec 2022 11:46:31 +0100
|
|
Subject: [PATCH 5/6] Simplify tdummy test.
|
|
|
|
* tests/tdummy.c: Include mpc.h without stdio.h; the test always succeeds
|
|
at run time, but may fail during compilation if there is an error in
|
|
mpc.h.
|
|
* tests/mpc-tests.h: Drop DONT_INCLUDE_STDIO macro.
|
|
---
|
|
tests/mpc-tests.h | 6 ------
|
|
tests/tdummy.c | 7 +------
|
|
2 files changed, 1 insertion(+), 12 deletions(-)
|
|
|
|
diff --git a/tests/mpc-tests.h b/tests/mpc-tests.h
|
|
index c6b5679..ecd10b7 100644
|
|
--- a/tests/mpc-tests.h
|
|
+++ b/tests/mpc-tests.h
|
|
@@ -22,9 +22,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
#define __MPC_TESTS_H
|
|
|
|
#include "config.h"
|
|
-#ifndef DONT_INCLUDE_STDIO
|
|
#include <stdio.h>
|
|
-#endif
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <inttypes.h> /* for the PRIi64 format modifier */
|
|
@@ -141,7 +139,6 @@ extern int same_mpc_value (mpc_ptr got, mpc_ptr ref,
|
|
known_signs_t known_signs);
|
|
|
|
/** READ FILE WITH TEST DATA SET **/
|
|
-#ifndef DONT_INCLUDE_STDIO
|
|
extern FILE * open_data_file (const char *file_name);
|
|
extern void close_data_file (FILE *fp);
|
|
|
|
@@ -156,7 +153,6 @@ extern size_t read_string (FILE *fp, char **buffer_ptr,
|
|
size_t buffer_length, const char *name);
|
|
extern void read_mpfr (FILE *fp, mpfr_ptr x, int *known_sign);
|
|
extern void read_mpc (FILE *fp, mpc_ptr z, known_signs_t *ks);
|
|
-#endif
|
|
|
|
void set_mpfr_flags (int counter);
|
|
void check_mpfr_flags (int counter);
|
|
@@ -289,7 +285,6 @@ typedef struct {
|
|
void read_description (mpc_fun_param_t* param, const char *file);
|
|
const char* read_description_findname (mpc_param_t e);
|
|
|
|
-#ifndef DONT_INCLUDE_STDIO
|
|
/* file functions */
|
|
typedef struct {
|
|
char *pathname;
|
|
@@ -342,7 +337,6 @@ void tpl_read_mpc (mpc_datafile_context_t* datafile_context,
|
|
mpc_data_t* z);
|
|
void tpl_read_mpc_rnd (mpc_datafile_context_t* datafile_context,
|
|
mpc_rnd_t* rnd);
|
|
-#endif
|
|
|
|
int tpl_same_mpz_value (mpz_ptr n1, mpz_ptr n2);
|
|
int tpl_same_mpfr_value (mpfr_ptr x1, mpfr_ptr x2, int known_sign);
|
|
diff --git a/tests/tdummy.c b/tests/tdummy.c
|
|
index 23072f5..e525609 100644
|
|
--- a/tests/tdummy.c
|
|
+++ b/tests/tdummy.c
|
|
@@ -18,16 +18,11 @@ You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
*/
|
|
|
|
-#define DONT_INCLUDE_STDIO
|
|
-#include "mpc-tests.h"
|
|
+#include "mpc.h"
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
- test_start ();
|
|
-
|
|
- test_end ();
|
|
-
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.39.0
|
|
|
|
From 8fe31f02431b3680f09bf1346787276ddb2274a2 Mon Sep 17 00:00:00 2001
|
|
From: Andreas Enge <andreas.enge@inria.fr>
|
|
Date: Mon, 12 Dec 2022 15:30:57 +0100
|
|
Subject: [PATCH 6/6] Include header file.
|
|
|
|
This was detected by trying to compile with gmp-5.0.0 and mpfr-4.1.0.
|
|
|
|
* src/balls.c, src/eta.c: Include limits.h.
|
|
---
|
|
src/balls.c | 1 +
|
|
src/eta.c | 1 +
|
|
2 files changed, 2 insertions(+)
|
|
|
|
diff --git a/src/balls.c b/src/balls.c
|
|
index 03a44a8..a18d37f 100644
|
|
--- a/src/balls.c
|
|
+++ b/src/balls.c
|
|
@@ -18,6 +18,7 @@ You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
*/
|
|
|
|
+#include <limits.h> /* for CHAR_BIT */
|
|
#include "mpc-impl.h"
|
|
|
|
|
|
diff --git a/src/eta.c b/src/eta.c
|
|
index 7d397f0..0651e15 100644
|
|
--- a/src/eta.c
|
|
+++ b/src/eta.c
|
|
@@ -19,6 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
*/
|
|
|
|
#include <math.h>
|
|
+#include <limits.h> /* for CHAR_BIT */
|
|
#include "mpc-impl.h"
|
|
|
|
static void
|
|
--
|
|
2.39.0
|
|
|