From: Chris Lattner Date: Thu, 11 Oct 2007 06:12:33 +0000 (+0000) Subject: make bitvector &= do the right thing if vectors have mismatched length. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=343960af3177b056266fc719489e6ec7a5d869de;p=oota-llvm.git make bitvector &= do the right thing if vectors have mismatched length. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42860 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 50ccdab159e..dc408af4ae2 100644 --- a/include/llvm/ADT/BitVector.h +++ b/include/llvm/ADT/BitVector.h @@ -274,9 +274,18 @@ public: // Intersection, union, disjoint union. BitVector operator&=(const BitVector &RHS) { - assert(Size == RHS.Size && "Illegal operation!"); - for (unsigned i = 0; i < NumBitWords(size()); ++i) + unsigned ThisWords = NumBitWords(size()); + unsigned RHSWords = NumBitWords(RHS.size()); + unsigned i; + for (i = 0; i != std::min(ThisWords, RHSWords); ++i) Bits[i] &= RHS.Bits[i]; + + // Any bits that are just in this bitvector become zero, because they aren't + // in the RHS bit vector. Any words only in RHS are ignored because they + // are already zero in the LHS. + for (; i != ThisWords; ++i) + Bits[i] = 0; + return *this; }