From e4ce71d07aa1731d6c87bd43cc6440f724a21486 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Thu, 22 Feb 2007 00:22:00 +0000 Subject: [PATCH] Fix countLeadingZeros in the case that the bitwidth evenly divides the 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. llvm-svn: 34483 --- llvm/lib/Support/APInt.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Support/APInt.cpp b/llvm/lib/Support/APInt.cpp index a515366db21d..c8ab2d762b6b 100644 --- a/llvm/lib/Support/APInt.cpp +++ b/llvm/lib/Support/APInt.cpp @@ -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