[GIT] ppl/ppl(master): Avoid explicit integral conversions that change the signedness of the underlying type of complex expressions .

Module: ppl/ppl Branch: master Commit: ba709e9a0db165a9aafd3765f0c7fcf72e2d5b99 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=ba709e9a0db16...
Author: Roberto Bagnara bagnara@cs.unipr.it Date: Sat Oct 29 15:04:04 2011 +0200
Avoid explicit integral conversions that change the signedness of the underlying type of complex expressions. Detected by ECLAIR service utypflag.
---
src/Float.inlines.hh | 26 ++++++++++++++++++-------- 1 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/Float.inlines.hh b/src/Float.inlines.hh index 34281b3..9ae573f 100644 --- a/src/Float.inlines.hh +++ b/src/Float.inlines.hh @@ -85,7 +85,9 @@ float_ieee754_half::build(bool negative, mpz_t mantissa, int exponent) { word = mpz_get_ui(mantissa) & ((1UL << MANTISSA_BITS) - 1); if (negative) word |= SGN_MASK; - word |= static_cast<uint16_t>(exponent + EXPONENT_BIAS) << MANTISSA_BITS; + int exponent_repr = exponent + EXPONENT_BIAS; + PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 << EXPONENT_BITS)); + word |= static_cast<uint16_t>(exponent_repr) << MANTISSA_BITS; }
inline int @@ -143,7 +145,9 @@ float_ieee754_single::build(bool negative, mpz_t mantissa, int exponent) { word = mpz_get_ui(mantissa) & ((1UL << MANTISSA_BITS) - 1); if (negative) word |= SGN_MASK; - word |= static_cast<uint32_t>(exponent + EXPONENT_BIAS) << MANTISSA_BITS; + int exponent_repr = exponent + EXPONENT_BIAS; + PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 << EXPONENT_BITS)); + word |= static_cast<uint32_t>(exponent_repr) << MANTISSA_BITS; }
inline int @@ -226,8 +230,9 @@ float_ieee754_double::build(bool negative, mpz_t mantissa, int exponent) { msp = m & ((1UL << (MANTISSA_BITS - 32)) - 1); if (negative) msp |= MSP_SGN_MASK; - msp |= static_cast<uint32_t>(exponent + EXPONENT_BIAS) - << (MANTISSA_BITS - 32); + int exponent_repr = exponent + EXPONENT_BIAS; + PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 << EXPONENT_BITS)); + msp |= static_cast<uint32_t>(exponent_repr) << (MANTISSA_BITS - 32); }
inline int @@ -285,7 +290,9 @@ float_ibm_single::build(bool negative, mpz_t mantissa, int exponent) { word = mpz_get_ui(mantissa) & ((1UL << MANTISSA_BITS) - 1); if (negative) word |= SGN_MASK; - word |= static_cast<uint32_t>(exponent + EXPONENT_BIAS) << MANTISSA_BITS; + int exponent_repr = exponent + EXPONENT_BIAS; + PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 << EXPONENT_BITS)); + word |= static_cast<uint32_t>(exponent_repr) << MANTISSA_BITS; }
inline int @@ -365,7 +372,9 @@ float_intel_double_extended::build(bool negative, lsp = mpz_get_ui(mantissa); #endif msp = (negative ? MSP_SGN_MASK : 0); - msp |= static_cast<uint32_t>(exponent + EXPONENT_BIAS); + int exponent_repr = exponent + EXPONENT_BIAS; + PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 << EXPONENT_BITS)); + msp |= static_cast<uint32_t>(exponent_repr); }
inline int @@ -443,8 +452,9 @@ float_ieee754_quad::build(bool negative, mpz_t mantissa, int exponent) { msp &= ((1ULL << (MANTISSA_BITS - 64)) - 1); if (negative) msp |= MSP_SGN_MASK; - msp |= static_cast<uint64_t>(exponent + EXPONENT_BIAS) - << (MANTISSA_BITS - 64); + int exponent_repr = exponent + EXPONENT_BIAS; + PPL_ASSERT(exponent_repr >= 0 && exponent_repr < (1 << EXPONENT_BITS)); + msp |= static_cast<uint64_t>(exponent_repr) << (MANTISSA_BITS - 64); }
inline bool
participants (1)
-
Roberto Bagnara