From: Reid Spencer Date: Sat, 24 Mar 2007 23:47:58 +0000 (+0000) Subject: Make it illegal to set 0 bits in getHighBitsSet and getLowBitsSet. For that X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=758d1bc919f3f0856df102f6db64ef9b894d4c23;p=oota-llvm.git Make it illegal to set 0 bits in getHighBitsSet and getLowBitsSet. For that they should have used the uint64_t constructor. This avoids causing undefined results via shifts by the word size when the bit width is an exact multiple of the word size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35313 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h index b524b56e9b4..8f3b2f6a6d4 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -355,6 +355,7 @@ public: /// @brief Get a value with high bits set static APInt getHighBitsSet(uint32_t numBits, uint32_t hiBitsSet) { assert(hiBitsSet <= numBits && "Too many bits to set!"); + assert(hiBitsSet > 0 && "You must set SOME bits"); uint32_t shiftAmt = numBits - hiBitsSet; // For small values, return quickly if (numBits <= APINT_BITS_PER_WORD) @@ -368,6 +369,7 @@ public: /// @brief Get a value with low bits set static APInt getLowBitsSet(uint32_t numBits, uint32_t loBitsSet) { assert(loBitsSet <= numBits && "Too many bits to set!"); + assert(loBitsSet > 0 && "You must set SOME bits"); uint32_t shiftAmt = numBits - loBitsSet; // For small values, return quickly if (numBits <= APINT_BITS_PER_WORD)