From e3f7be36c75ddcafb24b52c36c55c3dc17215db3 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Tue, 16 Oct 2012 06:04:27 +0000 Subject: Fix a bug in the set(I,E)/reset(I,E) methods that I recently added. The boundary condition for checking if I and E were in the same word were incorrect, and, beyond that, the mask computation was not using a wide enough constant. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166015 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/BitVector.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 4523828d45..9d6388f7ee 100644 --- a/include/llvm/ADT/BitVector.h +++ b/include/llvm/ADT/BitVector.h @@ -244,9 +244,9 @@ public: if (I == E) return *this; - if (I / BITWORD_SIZE == (E-1) / BITWORD_SIZE) { - BitWord EMask = 1 << (E % BITWORD_SIZE); - BitWord IMask = 1 << (I % BITWORD_SIZE); + if (I / BITWORD_SIZE == E / BITWORD_SIZE) { + BitWord EMask = 1UL << (E % BITWORD_SIZE); + BitWord IMask = 1UL << (I % BITWORD_SIZE); BitWord Mask = EMask - IMask; Bits[I / BITWORD_SIZE] |= Mask; return *this; @@ -282,9 +282,9 @@ public: if (I == E) return *this; - if (I / BITWORD_SIZE == (E-1) / BITWORD_SIZE) { - BitWord EMask = 1 << (E % BITWORD_SIZE); - BitWord IMask = 1 << (I % BITWORD_SIZE); + if (I / BITWORD_SIZE == E / BITWORD_SIZE) { + BitWord EMask = 1UL << (E % BITWORD_SIZE); + BitWord IMask = 1UL << (I % BITWORD_SIZE); BitWord Mask = EMask - IMask; Bits[I / BITWORD_SIZE] &= ~Mask; return *this; -- cgit v1.2.3