mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 07:34:33 +00:00
SmallVector: return a valid iterator for the rare case of inserting an empty range into a SmallVector.
Patch by Johannes Schaub! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158643 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8dffa4a106
commit
5f6c7cfa93
@ -542,7 +542,7 @@ public:
|
||||
iterator insert(iterator I, size_type NumToInsert, const T &Elt) {
|
||||
if (I == this->end()) { // Important special case for empty vector.
|
||||
append(NumToInsert, Elt);
|
||||
return this->end()-1;
|
||||
return NumToInsert == 0 ? this->end() : this->end()-1;
|
||||
}
|
||||
|
||||
// Convert iterator to elt# to avoid invalidating iterator when we reserve()
|
||||
@ -590,7 +590,7 @@ public:
|
||||
iterator insert(iterator I, ItTy From, ItTy To) {
|
||||
if (I == this->end()) { // Important special case for empty vector.
|
||||
append(From, To);
|
||||
return this->end()-1;
|
||||
return From == To ? this->end() : this->end()-1;
|
||||
}
|
||||
|
||||
size_t NumToInsert = std::distance(From, To);
|
||||
|
@ -353,6 +353,9 @@ TEST_F(SmallVectorTest, InsertRepeatedTest) {
|
||||
makeSequence(theVector, 10, 15);
|
||||
theVector.insert(theVector.begin() + 1, 2, Constructable(16));
|
||||
assertValuesInOrder(theVector, 8u, 10, 16, 16, 11, 12, 13, 14, 15);
|
||||
|
||||
EXPECT_EQ(theVector.end(),
|
||||
theVector.insert(theVector.end(), 0, Constructable(42)));
|
||||
}
|
||||
|
||||
// Insert range.
|
||||
@ -362,6 +365,10 @@ TEST_F(SmallVectorTest, InsertRangeTest) {
|
||||
makeSequence(theVector, 1, 3);
|
||||
theVector.insert(theVector.begin() + 1, 3, Constructable(77));
|
||||
assertValuesInOrder(theVector, 6u, 1, 77, 77, 77, 2, 3);
|
||||
|
||||
EXPECT_EQ(theVector.end(), theVector.insert(theVector.end(),
|
||||
theVector.begin(),
|
||||
theVector.begin()));
|
||||
}
|
||||
|
||||
// Comparison tests.
|
||||
|
Loading…
x
Reference in New Issue
Block a user