95 lines
3.1 KiB
Diff
95 lines
3.1 KiB
Diff
Upstream-Status: Pending
|
|
|
|
When LONG_MIN is passed to val, -val is undefined. This patch fixes
|
|
it. See for details: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50066
|
|
|
|
Received this patch from H.J. Lu <hjl.tools@gmail.com>
|
|
|
|
Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com> 2011/12/01
|
|
|
|
--- gmp-4.3.2/mpf/iset_si.c.ll 2010-01-07 12:09:03.000000000 -0800
|
|
+++ gmp-4.3.2/mpf/iset_si.c 2011-11-30 16:42:35.827944358 -0800
|
|
@@ -31,7 +31,7 @@ mpf_init_set_si (mpf_ptr r, long int val
|
|
r->_mp_prec = prec;
|
|
r->_mp_d = (mp_ptr) (*__gmp_allocate_func) ((prec + 1) * BYTES_PER_MP_LIMB);
|
|
|
|
- vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
|
|
+ vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
|
|
|
|
r->_mp_d[0] = vl & GMP_NUMB_MASK;
|
|
size = vl != 0;
|
|
--- gmp-4.3.2/mpf/set_si.c.ll 2010-01-07 12:09:03.000000000 -0800
|
|
+++ gmp-4.3.2/mpf/set_si.c 2011-11-30 16:42:47.823878367 -0800
|
|
@@ -27,7 +27,7 @@ mpf_set_si (mpf_ptr dest, long val)
|
|
mp_size_t size;
|
|
mp_limb_t vl;
|
|
|
|
- vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
|
|
+ vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
|
|
|
|
dest->_mp_d[0] = vl & GMP_NUMB_MASK;
|
|
size = vl != 0;
|
|
--- gmp-4.3.2/mpz/cmp_si.c.ll 2010-01-07 12:09:03.000000000 -0800
|
|
+++ gmp-4.3.2/mpz/cmp_si.c 2011-11-30 13:44:25.923319700 -0800
|
|
@@ -27,7 +27,7 @@ _mpz_cmp_si (mpz_srcptr u, signed long i
|
|
{
|
|
mp_size_t usize = u->_mp_size;
|
|
mp_size_t vsize;
|
|
- mp_limb_t u_digit;
|
|
+ mp_limb_t u_digit, vl_digit;
|
|
|
|
#if GMP_NAIL_BITS != 0
|
|
/* FIXME. This isn't very pretty. */
|
|
@@ -41,11 +41,14 @@ _mpz_cmp_si (mpz_srcptr u, signed long i
|
|
|
|
vsize = 0;
|
|
if (v_digit > 0)
|
|
- vsize = 1;
|
|
+ {
|
|
+ vsize = 1;
|
|
+ vl_digit = (mp_limb_t) (unsigned long) v_digit;
|
|
+ }
|
|
else if (v_digit < 0)
|
|
{
|
|
vsize = -1;
|
|
- v_digit = -v_digit;
|
|
+ vl_digit = (mp_limb_t) -(unsigned long) v_digit;
|
|
}
|
|
|
|
if (usize != vsize)
|
|
@@ -56,10 +59,10 @@ _mpz_cmp_si (mpz_srcptr u, signed long i
|
|
|
|
u_digit = u->_mp_d[0];
|
|
|
|
- if (u_digit == (mp_limb_t) (unsigned long) v_digit)
|
|
+ if (u_digit == vl_digit)
|
|
return 0;
|
|
|
|
- if (u_digit > (mp_limb_t) (unsigned long) v_digit)
|
|
+ if (u_digit > vl_digit)
|
|
return usize;
|
|
else
|
|
return -usize;
|
|
--- gmp-4.3.2/mpz/iset_si.c.ll 2010-01-07 12:09:03.000000000 -0800
|
|
+++ gmp-4.3.2/mpz/iset_si.c 2011-11-30 13:44:25.924319695 -0800
|
|
@@ -31,7 +31,7 @@ mpz_init_set_si (mpz_ptr dest, signed lo
|
|
dest->_mp_alloc = 1;
|
|
dest->_mp_d = (mp_ptr) (*__gmp_allocate_func) (BYTES_PER_MP_LIMB);
|
|
|
|
- vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
|
|
+ vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
|
|
|
|
dest->_mp_d[0] = vl & GMP_NUMB_MASK;
|
|
size = vl != 0;
|
|
--- gmp-4.3.2/mpz/set_si.c.ll 2010-01-07 12:09:03.000000000 -0800
|
|
+++ gmp-4.3.2/mpz/set_si.c 2011-11-30 13:44:25.947319574 -0800
|
|
@@ -27,7 +27,7 @@ mpz_set_si (mpz_ptr dest, signed long in
|
|
mp_size_t size;
|
|
mp_limb_t vl;
|
|
|
|
- vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
|
|
+ vl = (mp_limb_t) (val >= 0 ? (unsigned long int) val : -(unsigned long int) val);
|
|
|
|
dest->_mp_d[0] = vl & GMP_NUMB_MASK;
|
|
size = vl != 0;
|