[MPFR] Fix regression on 32-bit host systems
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 11 Dec 2017 14:26:26 +0000 (15:26 +0100)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Mon, 11 Dec 2017 14:26:26 +0000 (15:26 +0100)
When converting parts of the mantissa to MPFR, we need to make sure to do
an *unsigned* conversion.  Since we convert at most 32 bits at a time,
stored in an unsigned long, this doesn't matter on systems where "long"
is larger than 32 bits.  But on systems where it is 32 bits, we can get
conversion errors.

gdb/ChangeLog
2017-12-11  Ulrich Weigand  <uweigand@de.ibm.com>

* target-float.c (mpfr_float_ops::from_target): Use mpfr_set_ui
instead of mpfr_set_si to convert mantissa bits.

gdb/ChangeLog
gdb/target-float.c

index 1c67e413a876e012cfe3d71f56b789a0b367a7b1..b3c5b97936006cda8f1c659cc83a6082bb4200c4 100644 (file)
@@ -1,3 +1,8 @@
+2017-12-11  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * target-float.c (mpfr_float_ops::from_target): Use mpfr_set_ui
+       instead of mpfr_set_si to convert mantissa bits.
+
 2017-12-11  Xavier Roirand <roirand@adacore.com>
            Joel Brobecker  <brobecker@adacore.com>
 
index b40b6416c1ca55c00ebff65a11183f913bc0eebd..9b146094bb77094dde90a07572d071c2b01248dd 100644 (file)
@@ -1312,7 +1312,7 @@ mpfr_float_ops::from_target (const struct floatformat *fmt,
 
       mant = get_field (from, order, fmt->totalsize, mant_off, mant_bits);
 
-      mpfr_set_si (tmp.val, mant, MPFR_RNDN);
+      mpfr_set_ui (tmp.val, mant, MPFR_RNDN);
       mpfr_mul_2si (tmp.val, tmp.val, exponent - mant_bits, MPFR_RNDN);
       mpfr_add (to.val, to.val, tmp.val, MPFR_RNDN);
       exponent -= mant_bits;