mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Fix some more moving-from-moved-from objects issues in SmallVector
(& because it makes it easier to test, this also improves correctness/performance slightly by moving the last element in an insert operation, rather than copying it) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210429 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bef256f49b
commit
9262e52075
@ -516,10 +516,10 @@ public:
|
||||
this->grow();
|
||||
I = this->begin()+EltNo;
|
||||
}
|
||||
::new ((void*) this->end()) T(this->back());
|
||||
this->setEnd(this->end()+1);
|
||||
::new ((void*) this->end()) T(std::move(this->back()));
|
||||
// Push everything else over.
|
||||
this->move_backward(I, this->end()-1, this->end());
|
||||
this->setEnd(this->end()+1);
|
||||
|
||||
// If we just moved the element we're inserting, be sure to update
|
||||
// the reference.
|
||||
|
@ -42,12 +42,15 @@ public:
|
||||
}
|
||||
|
||||
Constructable(const Constructable & src) : constructed(true) {
|
||||
EXPECT_TRUE(src.constructed);
|
||||
value = src.value;
|
||||
++numConstructorCalls;
|
||||
}
|
||||
|
||||
Constructable(Constructable && src) : constructed(true) {
|
||||
EXPECT_TRUE(src.constructed);
|
||||
value = src.value;
|
||||
src.value = -1;
|
||||
++numConstructorCalls;
|
||||
}
|
||||
|
||||
@ -59,6 +62,7 @@ public:
|
||||
|
||||
Constructable & operator=(const Constructable & src) {
|
||||
EXPECT_TRUE(constructed);
|
||||
EXPECT_TRUE(src.constructed);
|
||||
value = src.value;
|
||||
++numAssignmentCalls;
|
||||
return *this;
|
||||
@ -66,7 +70,9 @@ public:
|
||||
|
||||
Constructable & operator=(Constructable && src) {
|
||||
EXPECT_TRUE(constructed);
|
||||
EXPECT_TRUE(src.constructed);
|
||||
value = src.value;
|
||||
src.value = -1;
|
||||
++numAssignmentCalls;
|
||||
return *this;
|
||||
}
|
||||
@ -413,6 +419,18 @@ TYPED_TEST(SmallVectorTest, InsertTest) {
|
||||
this->assertValuesInOrder(this->theVector, 4u, 1, 77, 2, 3);
|
||||
}
|
||||
|
||||
// Insert a copy of a single element.
|
||||
TYPED_TEST(SmallVectorTest, InsertCopy) {
|
||||
SCOPED_TRACE("InsertTest");
|
||||
|
||||
this->makeSequence(this->theVector, 1, 3);
|
||||
Constructable C(77);
|
||||
typename TypeParam::iterator I =
|
||||
this->theVector.insert(this->theVector.begin() + 1, C);
|
||||
EXPECT_EQ(this->theVector.begin() + 1, I);
|
||||
this->assertValuesInOrder(this->theVector, 4u, 1, 77, 2, 3);
|
||||
}
|
||||
|
||||
// Insert repeated elements.
|
||||
TYPED_TEST(SmallVectorTest, InsertRepeatedTest) {
|
||||
SCOPED_TRACE("InsertRepeatedTest");
|
||||
|
Loading…
Reference in New Issue
Block a user