OSDN Git Service

Fix countLeadingZeros in the case that the bitwidth evenly divides the
authorReid Spencer <rspencer@reidspencer.com>
Thu, 22 Feb 2007 00:22:00 +0000 (00:22 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Thu, 22 Feb 2007 00:22:00 +0000 (00:22 +0000)
word size. This fixes all reads of uninitialized data (buffer over read)
and makes APInt.cpp memory clean, per valgrind. The only remaining
problem is division in a few cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34483 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/APInt.cpp

index a515366..c8ab2d7 100644 (file)
@@ -726,7 +726,10 @@ uint32_t APInt::countLeadingZeros() const {
       }
     }
   }
-  return Count - (APINT_BITS_PER_WORD - (BitWidth % APINT_BITS_PER_WORD));
+  uint32_t remainder = BitWidth % APINT_BITS_PER_WORD;
+  if (remainder)
+    Count -= APINT_BITS_PER_WORD - remainder;
+  return Count;
 }
 
 /// countTrailingZeros - This function is a APInt version corresponding to