2 minor issues on Windows
Marco Bodrato
bodrato at mail.dm.unipi.it
Sat Mar 12 23:46:19 CET 2022
Ciao,
Il 2022-02-03 08:50 nisse at lysator.liu.se ha scritto:
> George Woltman <woltman at alum.mit.edu> writes:
>> Minor issue #2 (I should have reported this years ago, sorry):
>> In gmp.h, these lines:
>> mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n)
[...]
>> *__gmp_rp = (- *__gmp_up) & GMP_NUMB_MASK;
>> The last line generates this compiler warning:
>> warning C4146: unary minus operator applied to unsigned type, result
>> still
> I can only suggest that you disable or ignore that warning. Operations
> on unsigned types is well defined by the C standard, and gmp depends on
> practically all possible corner cases to work according to spec.
Maybe we can avoid this in the file gmp.h; it is used during the
compiling process of any project using the library...
What about the following?
--- a/gmp-h.in Fri Mar 11 21:13:20 2022 +0100
+++ b/gmp-h.in Sat Mar 12 23:23:09 2022 +0100
@@ -2234,7 +2234,7 @@
++__gmp_up; ++__gmp_rp;
}
- *__gmp_rp = (- *__gmp_up) & GMP_NUMB_MASK;
+ *__gmp_rp = (1 + ~ *__gmp_up) & GMP_NUMB_MASK;
if (--__gmp_n) /* Higher limbs get complemented. */
mpn_com (++__gmp_rp, ++__gmp_up, __gmp_n);
For an optimising compiler, there should not be any difference.
"+ ~ *" is a funny sequence of operators :-)
Ĝis,
m
More information about the gmp-bugs
mailing list