[libcxx] Fix incorrect iterator type in vector container test

The iterator types for different specializations of containers with the
same element type but different allocators are not required to be
convertible. This patch makes the test to take the iterator type from
the same container specialization as the created container.

Reviewed as https://reviews.llvm.org/D54806.
Thanks to Andrey Maksimov for the patch.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@347423 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Louis Dionne
2018-11-21 20:53:07 +00:00
parent 3ad8fb7ecd
commit 5beaebf500

View File

@@ -25,11 +25,12 @@
int main() int main()
{ {
{ {
std::vector<int> v(100); typedef std::vector<int> V;
V v(100);
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const int N = sizeof(a)/sizeof(a[0]); const int N = sizeof(a)/sizeof(a[0]);
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
input_iterator<const int*>(a+N)); input_iterator<const int*>(a+N));
assert(v.size() == 100 + N); assert(v.size() == 100 + N);
assert(is_contiguous_container_asan_correct(v)); assert(is_contiguous_container_asan_correct(v));
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
@@ -42,11 +43,12 @@ int main()
assert(v[j] == 0); assert(v[j] == 0);
} }
{ {
std::vector<int> v(100); typedef std::vector<int> V;
V v(100);
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const int N = sizeof(a)/sizeof(a[0]); const int N = sizeof(a)/sizeof(a[0]);
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
forward_iterator<const int*>(a+N)); forward_iterator<const int*>(a+N));
assert(v.size() == 100 + N); assert(v.size() == 100 + N);
assert(is_contiguous_container_asan_correct(v)); assert(is_contiguous_container_asan_correct(v));
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
@@ -59,13 +61,14 @@ int main()
assert(v[j] == 0); assert(v[j] == 0);
} }
{ {
std::vector<int> v(100); typedef std::vector<int> V;
V v(100);
while(v.size() < v.capacity()) v.push_back(0); // force reallocation while(v.size() < v.capacity()) v.push_back(0); // force reallocation
size_t sz = v.size(); size_t sz = v.size();
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const unsigned N = sizeof(a)/sizeof(a[0]); const unsigned N = sizeof(a)/sizeof(a[0]);
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
forward_iterator<const int*>(a+N)); forward_iterator<const int*>(a+N));
assert(v.size() == sz + N); assert(v.size() == sz + N);
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
std::size_t j; std::size_t j;
@@ -77,13 +80,14 @@ int main()
assert(v[j] == 0); assert(v[j] == 0);
} }
{ {
std::vector<int> v(100); typedef std::vector<int> V;
V v(100);
v.reserve(128); // force no reallocation v.reserve(128); // force no reallocation
size_t sz = v.size(); size_t sz = v.size();
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const unsigned N = sizeof(a)/sizeof(a[0]); const unsigned N = sizeof(a)/sizeof(a[0]);
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
forward_iterator<const int*>(a+N)); forward_iterator<const int*>(a+N));
assert(v.size() == sz + N); assert(v.size() == sz + N);
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
std::size_t j; std::size_t j;
@@ -95,11 +99,12 @@ int main()
assert(v[j] == 0); assert(v[j] == 0);
} }
{ {
std::vector<int, limited_allocator<int, 308> > v(100); typedef std::vector<int, limited_allocator<int, 308> > V;
V v(100);
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const int N = sizeof(a)/sizeof(a[0]); const int N = sizeof(a)/sizeof(a[0]);
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
input_iterator<const int*>(a+N)); input_iterator<const int*>(a+N));
assert(v.size() == 100 + N); assert(v.size() == 100 + N);
assert(is_contiguous_container_asan_correct(v)); assert(is_contiguous_container_asan_correct(v));
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
@@ -112,11 +117,12 @@ int main()
assert(v[j] == 0); assert(v[j] == 0);
} }
{ {
std::vector<int, limited_allocator<int, 300> > v(100); typedef std::vector<int, limited_allocator<int, 300> > V;
V v(100);
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const int N = sizeof(a)/sizeof(a[0]); const int N = sizeof(a)/sizeof(a[0]);
std::vector<int>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
forward_iterator<const int*>(a+N)); forward_iterator<const int*>(a+N));
assert(v.size() == 100 + N); assert(v.size() == 100 + N);
assert(is_contiguous_container_asan_correct(v)); assert(is_contiguous_container_asan_correct(v));
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
@@ -130,11 +136,12 @@ int main()
} }
#if TEST_STD_VER >= 11 #if TEST_STD_VER >= 11
{ {
std::vector<int, min_allocator<int>> v(100); typedef std::vector<int, min_allocator<int> > V;
V v(100);
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const int N = sizeof(a)/sizeof(a[0]); const int N = sizeof(a)/sizeof(a[0]);
std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, input_iterator<const int*>(a),
input_iterator<const int*>(a+N)); input_iterator<const int*>(a+N));
assert(v.size() == 100 + N); assert(v.size() == 100 + N);
assert(is_contiguous_container_asan_correct(v)); assert(is_contiguous_container_asan_correct(v));
assert(i == v.begin() + 10); assert(i == v.begin() + 10);
@@ -147,11 +154,12 @@ int main()
assert(v[j] == 0); assert(v[j] == 0);
} }
{ {
std::vector<int, min_allocator<int>> v(100); typedef std::vector<int, min_allocator<int> > V;
V v(100);
int a[] = {1, 2, 3, 4, 5}; int a[] = {1, 2, 3, 4, 5};
const int N = sizeof(a)/sizeof(a[0]); const int N = sizeof(a)/sizeof(a[0]);
std::vector<int, min_allocator<int>>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a), V::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const int*>(a),
forward_iterator<const int*>(a+N)); forward_iterator<const int*>(a+N));
assert(v.size() == 100 + N); assert(v.size() == 100 + N);
assert(is_contiguous_container_asan_correct(v)); assert(is_contiguous_container_asan_correct(v));
assert(i == v.begin() + 10); assert(i == v.begin() + 10);