]> git.eshelyaron.com Git - emacs.git/commitdiff
; Add a FIXME regarding the GMP memory allocation functions.
authorPhilipp Stephani <phst@google.com>
Mon, 13 Dec 2021 17:28:13 +0000 (18:28 +0100)
committerPhilipp Stephani <phst@google.com>
Mon, 13 Dec 2021 17:28:13 +0000 (18:28 +0100)
* src/bignum.c (init_bignum): Add a warning about the technically
incorrect use of the GMP memory allocation functions.

src/bignum.c

index 1ac75c19e243b1c02c52f49c615eaa061c32e2c4..5c587fc6dbafa6e827b365b1b5282068efae0e27 100644 (file)
@@ -53,6 +53,15 @@ init_bignum (void)
 {
   eassert (mp_bits_per_limb == GMP_NUMB_BITS);
   integer_width = 1 << 16;
+
+  /* FIXME: The Info node `(gmp) Custom Allocation' states: "No error
+     return is allowed from any of these functions, if they return
+     then they must have performed the specified operation. [...]
+     There's currently no defined way for the allocation functions to
+     recover from an error such as out of memory, they must terminate
+     program execution.  A 'longjmp' or throwing a C++ exception will
+     have undefined results."  But xmalloc and xrealloc do call
+     'longjmp'.  */
   mp_set_memory_functions (xmalloc, xrealloc_for_gmp, xfree_for_gmp);
 
   for (int i = 0; i < ARRAYELTS (mpz); i++)