From a17c8678d78547bdda40b859064657ad732f61b0 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 12 Jul 2020 22:51:22 +0200 Subject: [PATCH] libgmp tests: Add some safety checks. * modules/libgmp-tests (Depends-on): Add verify. * tests/test-libgmp.c: Verify GMP_NUMB_BITS value. (main): Verify that gmp.h and libgmp versions match. --- ChangeLog | 7 +++++++ modules/libgmp-tests | 1 + tests/test-libgmp.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3737892191..8d71029d30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2020-07-12 Bruno Haible + + libgmp tests: Add some safety checks. + * modules/libgmp-tests (Depends-on): Add verify. + * tests/test-libgmp.c: Verify GMP_NUMB_BITS value. + (main): Verify that gmp.h and libgmp versions match. + 2020-07-10 Bruno Haible unicodeio: Fix wrong result on NetBSD. diff --git a/modules/libgmp-tests b/modules/libgmp-tests index 50a18016ca..c01b876a10 100644 --- a/modules/libgmp-tests +++ b/modules/libgmp-tests @@ -3,6 +3,7 @@ tests/macros.h tests/test-libgmp.c Depends-on: +verify configure.ac: diff --git a/tests/test-libgmp.c b/tests/test-libgmp.c index f72a74cd62..58ccc664c9 100644 --- a/tests/test-libgmp.c +++ b/tests/test-libgmp.c @@ -16,13 +16,49 @@ #include +/* Specification. */ #include +#include +#include + +#include "verify.h" + #include "macros.h" +#ifndef MINI_GMP_LIMB_TYPE +/* Verify that the gmp.h header file was generated for the same + machine word size as we are using. */ +verify (GMP_NUMB_BITS == sizeof (mp_limb_t) * CHAR_BIT); +#endif + int main () { +#ifndef MINI_GMP_LIMB_TYPE + /* Verify that the gmp.h header file and the libgmp library come from + the same GMP version. */ + { + char gmp_header_version[32]; + sprintf (gmp_header_version, "%d.%d.%d", __GNU_MP_VERSION, + __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL); + if (strcmp (gmp_version, gmp_header_version) != 0) + { + char gmp_header_version2[32]; + if (__GNU_MP_VERSION_PATCHLEVEL > 0 + || (sprintf (gmp_header_version2, "%d.%d", __GNU_MP_VERSION, + __GNU_MP_VERSION_MINOR), + strcmp (gmp_version, gmp_header_version2) != 0)) + { + fprintf (stderr, + "gmp header version (%s) does not match gmp library version (%s).\n", + gmp_header_version, gmp_version); + exit (1); + } + } + } +#endif + /* A simple sanity check that 2 + 2 = 4. */ static mp_limb_t const twobody[] = { 2 }; static mpz_t const two = MPZ_ROINIT_N ((mp_limb_t *) twobody, 1); -- 2.39.5