forked from OSchip/llvm-project
Fix BitVector move ctor/assignment.
Current implementation leaves the object in an invalid state. This reverts commit bf0c389ac683cd6c0e5959b16537e59e5f4589e3. llvm-svn: 272965
This commit is contained in:
parent
8dad57cc49
commit
660b1a49dc
|
@ -105,6 +105,7 @@ public:
|
|||
BitVector(BitVector &&RHS)
|
||||
: Bits(RHS.Bits), Size(RHS.Size), Capacity(RHS.Capacity) {
|
||||
RHS.Bits = nullptr;
|
||||
RHS.Size = RHS.Capacity = 0;
|
||||
}
|
||||
|
||||
~BitVector() {
|
||||
|
@ -454,6 +455,7 @@ public:
|
|||
Capacity = RHS.Capacity;
|
||||
|
||||
RHS.Bits = nullptr;
|
||||
RHS.Size = RHS.Capacity = 0;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
|
|
@ -399,5 +399,31 @@ TYPED_TEST(BitVectorTest, CompoundTestReset) {
|
|||
C.reset(C);
|
||||
EXPECT_TRUE(C.none());
|
||||
}
|
||||
|
||||
TYPED_TEST(BitVectorTest, MoveConstructor) {
|
||||
TypeParam A(10, true);
|
||||
TypeParam B(std::move(A));
|
||||
// Check that the move ctor leaves the moved-from object in a valid state.
|
||||
// The following line used to crash.
|
||||
A = B;
|
||||
|
||||
TypeParam C(10, true);
|
||||
EXPECT_EQ(C, A);
|
||||
EXPECT_EQ(C, B);
|
||||
}
|
||||
|
||||
TYPED_TEST(BitVectorTest, MoveAssignment) {
|
||||
TypeParam A(10, true);
|
||||
TypeParam B;
|
||||
B = std::move(A);
|
||||
// Check that move assignment leaves the moved-from object in a valid state.
|
||||
// The following line used to crash.
|
||||
A = B;
|
||||
|
||||
TypeParam C(10, true);
|
||||
EXPECT_EQ(C, A);
|
||||
EXPECT_EQ(C, B);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue