From 506e89949024a055fb9fc7258e96bf4b581135e4 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Thu, 15 Feb 2007 08:15:58 +0000 Subject: [PATCH] Bug fixes: assignment operator forgot to copy over size; copy ctor forgot to clear unused top bits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34305 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/BitVector.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 88a175c1789..2ac4a82e27f 100644 --- a/include/llvm/ADT/BitVector.h +++ b/include/llvm/ADT/BitVector.h @@ -86,6 +86,7 @@ public: Capacity = NumBitWords(s); Bits = new BitWord[Capacity]; init_words(Bits, Capacity, t); + clear_unused_bits(); } /// BitVector copy ctor. @@ -175,6 +176,7 @@ public: init_words(&Bits[OldCapacity], (Capacity-OldCapacity), t); } Size = N; + clear_unused_bits(); } void reserve(unsigned N) { @@ -274,17 +276,16 @@ public: const BitVector &operator=(const BitVector &RHS) { if (this == &RHS) return *this; - unsigned RHSWords = NumBitWords(RHS.size()); - unsigned NewSize = RHS.size(); - if (NewSize <= Capacity * BITS_PER_WORD) { + Size = RHS.size(); + unsigned RHSWords = NumBitWords(Size); + if (Size > Capacity * BITS_PER_WORD) { std::copy(RHS.Bits, &RHS.Bits[RHSWords], Bits); - Size = NewSize; clear_unused_bits(); return *this; } // Grow the bitvector to have enough elements. - Capacity = NumBitWords(NewSize); + Capacity = NumBitWords(Size); BitWord *NewBits = new BitWord[Capacity]; std::copy(RHS.Bits, &RHS.Bits[RHSWords], NewBits);