Fix tests that use allocators with incorrect value types

As a GNU extension we allow containers to be instantiated with
allocators that use a different value type from the container, and
automatically rebind the allocator to the correct type. This extension
is disabled in strict modes (when __STRICT_ANSI__ is defined, i.e.
-std=c++NN dialects). These testcases unintentionally rely on the
extension and so fail for strict modes.

Tests which intentionally make use of the extension will still fail in
strict dialects, but will be addressed in a later change.

	* testsuite/20_util/scoped_allocator/1.cc: Use allocator with correct
	value type for the container.
	* testsuite/23_containers/forward_list/cons/14.cc: Likewise.
	* testsuite/23_containers/map/56613.cc: Likewise.
	* testsuite/23_containers/unordered_map/55043.cc: Likewise.
	* testsuite/23_containers/unordered_map/allocator/copy.cc: Likewise.
	* testsuite/23_containers/unordered_map/allocator/copy_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/allocator/minimal.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/allocator/move.cc: Likewise.
	* testsuite/23_containers/unordered_map/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/allocator/noexcept.cc:
	Likewise.
	* testsuite/23_containers/unordered_map/cons/81891.cc: Likewise.
	* testsuite/23_containers/unordered_map/requirements/exception/
	basic.cc: Likewise.
	* testsuite/23_containers/unordered_map/requirements/exception/
	generation_prohibited.cc: Likewise.
	* testsuite/23_containers/unordered_map/requirements/exception/
	propagation_consistent.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/55043.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/copy.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/copy_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/minimal.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/move.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/move_assign.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/allocator/noexcept.cc:
	Likewise.
	* testsuite/23_containers/unordered_multimap/requirements/exception/
	basic.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/requirements/exception/
	generation_prohibited.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/requirements/exception/
	propagation_consistent.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/requirements/
	explicit_instantiation/5.cc: Likewise.
	* testsuite/ext/malloc_allocator/sanity.cc: Likewise.

From-SVN: r265331
This commit is contained in:
Jonathan Wakely 2018-10-19 22:49:40 +01:00 committed by Jonathan Wakely
parent e7f2d0bdb5
commit 78ed0f80c3
27 changed files with 111 additions and 68 deletions

View File

@ -1,5 +1,50 @@
2018-10-19 Jonathan Wakely <jwakely@redhat.com>
* testsuite/20_util/scoped_allocator/1.cc: Use allocator with correct
value type for the container.
* testsuite/23_containers/forward_list/cons/14.cc: Likewise.
* testsuite/23_containers/map/56613.cc: Likewise.
* testsuite/23_containers/unordered_map/55043.cc: Likewise.
* testsuite/23_containers/unordered_map/allocator/copy.cc: Likewise.
* testsuite/23_containers/unordered_map/allocator/copy_assign.cc:
Likewise.
* testsuite/23_containers/unordered_map/allocator/minimal.cc:
Likewise.
* testsuite/23_containers/unordered_map/allocator/move.cc: Likewise.
* testsuite/23_containers/unordered_map/allocator/move_assign.cc:
Likewise.
* testsuite/23_containers/unordered_map/allocator/noexcept.cc:
Likewise.
* testsuite/23_containers/unordered_map/cons/81891.cc: Likewise.
* testsuite/23_containers/unordered_map/requirements/exception/
basic.cc: Likewise.
* testsuite/23_containers/unordered_map/requirements/exception/
generation_prohibited.cc: Likewise.
* testsuite/23_containers/unordered_map/requirements/exception/
propagation_consistent.cc: Likewise.
* testsuite/23_containers/unordered_multimap/55043.cc: Likewise.
* testsuite/23_containers/unordered_multimap/allocator/copy.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/allocator/copy_assign.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/allocator/minimal.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/allocator/move.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/allocator/move_assign.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/allocator/noexcept.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/requirements/exception/
basic.cc: Likewise.
* testsuite/23_containers/unordered_multimap/requirements/exception/
generation_prohibited.cc: Likewise.
* testsuite/23_containers/unordered_multimap/requirements/exception/
propagation_consistent.cc: Likewise.
* testsuite/23_containers/unordered_multimap/requirements/
explicit_instantiation/5.cc: Likewise.
* testsuite/ext/malloc_allocator/sanity.cc: Likewise.
* ext/special_functions/airy_ai/check_nan.cc: Skip test for
non-standard extension when a strict -std=c++NN dialect is used.
* ext/special_functions/airy_ai/check_value.cc: Likewise.

View File

@ -57,12 +57,14 @@ void test01()
void test02()
{
typedef std::scoped_allocator_adaptor<Element::allocator_type> inner_alloc_type;
typedef std::scoped_allocator_adaptor<Element::allocator_type> alloc1_type;
typedef std::vector<Element, inner_alloc_type> EltVec;
typedef std::vector<Element, alloc1_type> EltVec;
typedef std::scoped_allocator_adaptor<Element::allocator_type,
Element::allocator_type> alloc_type;
Element::allocator_type> alloc2_type;
typedef std::allocator_traits<alloc2_type>::rebind_alloc<EltVec> alloc_type;
typedef std::vector<EltVec, alloc_type> EltVecVec;
@ -88,10 +90,8 @@ void test02()
VERIFY( evv3.get_allocator().get_personality() == 3 );
VERIFY( evv3[0].get_allocator().get_personality() == 4 );
VERIFY( evv3[0][0].get_allocator().get_personality() == 4 );
}
int main()
{
test01();

View File

@ -26,9 +26,9 @@ void test01()
{
using namespace std;
using list = forward_list<int>;
forward_list<list, scoped_allocator_adaptor<list::allocator_type>> l;
using alloc_type = allocator<list>;
forward_list<list, scoped_allocator_adaptor<alloc_type>> l;
// Check for forward_list(size_type, const allocator_type&)
l.emplace_front(1u);
}

View File

@ -67,6 +67,6 @@ bool operator!=(alloc<T>, alloc<U>) { return false; }
int main()
{
std::map<int, int, std::less<int>, alloc<int> > m;
std::map<int, int, std::less<int>, alloc<std::pair<const int, int>>> m;
m[1];
}

View File

@ -28,15 +28,9 @@ struct MoveOnly
MoveOnly(MoveOnly&&) = default;
};
using hash = std::hash<int>;
using equal = std::equal_to<int>;
template<typename Alloc>
using test_type = std::unordered_map<int, MoveOnly, hash, equal, Alloc>;
void test01()
{
typedef test_type<std::allocator<MoveOnly>> uim;
typedef std::unordered_map<int, MoveOnly> uim;
std::vector<uim> v;
v.emplace_back(uim());
}

View File

@ -39,7 +39,7 @@ using __gnu_test::propagating_allocator;
void test01()
{
typedef propagating_allocator<T, false> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, false> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -51,7 +51,7 @@ void test01()
void test02()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -63,7 +63,7 @@ void test02()
void test03()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,

View File

@ -39,7 +39,7 @@ using __gnu_test::propagating_allocator;
void test01()
{
typedef propagating_allocator<T, false> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, false> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -54,7 +54,7 @@ void test01()
void test02()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,

View File

@ -40,13 +40,12 @@ struct equal_to
bool operator==(const T& l, const T& r) { return l.i == r.i; }
bool operator<(const T& l, const T& r) { return l.i < r.i; }
using __gnu_test::SimpleAllocator;
typedef __gnu_test::SimpleAllocator<std::pair<const T, T>> alloc_type;
template class std::unordered_map<T, T, hash, equal_to, SimpleAllocator<T>>;
template class std::unordered_map<T, T, hash, equal_to, alloc_type>;
void test01()
{
typedef SimpleAllocator<T> alloc_type;
typedef std::allocator_traits<alloc_type> traits_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v(alloc_type{});

View File

@ -39,7 +39,7 @@ using __gnu_test::uneq_allocator;
void test01()
{
typedef uneq_allocator<T> alloc_type;
typedef uneq_allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -53,7 +53,7 @@ void test01()
void test02()
{
typedef uneq_allocator<T> alloc_type;
typedef uneq_allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,

View File

@ -27,7 +27,8 @@ using __gnu_test::counter_type;
void test01()
{
typedef propagating_allocator<counter_type, false> alloc_type;
typedef std::pair<const counter_type, counter_type> value_type;
typedef propagating_allocator<value_type, false> alloc_type;
typedef __gnu_test::counter_type_hasher hash;
typedef std::unordered_map<counter_type, counter_type, hash,
std::equal_to<counter_type>,
@ -54,7 +55,8 @@ void test01()
void test02()
{
typedef propagating_allocator<counter_type, true> alloc_type;
typedef std::pair<const counter_type, counter_type> value_type;
typedef propagating_allocator<value_type, true> alloc_type;
typedef __gnu_test::counter_type_hasher hash;
typedef std::unordered_map<counter_type, counter_type, hash,
std::equal_to<counter_type>,

View File

@ -44,7 +44,7 @@ using __gnu_test::propagating_allocator;
void test01()
{
typedef std::allocator<T> alloc_type;
typedef std::allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1;
test_type v2;
@ -55,7 +55,7 @@ void test01()
void test02()
{
typedef std::allocator<T> alloc_type;
typedef std::allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_map<T, T, hash_t, equal_to, alloc_type> test_type;
test_type v1;
test_type v2;
@ -65,7 +65,7 @@ void test02()
void test03()
{
typedef std::allocator<T> alloc_type;
typedef std::allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to_t, alloc_type> test_type;
test_type v1;
test_type v2;
@ -75,7 +75,7 @@ void test03()
void test04()
{
typedef propagating_allocator<T, false> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, false> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
test_type v2(alloc_type(2));
@ -85,7 +85,7 @@ void test04()
void test05()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_map<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
test_type v2(alloc_type(2));

View File

@ -26,7 +26,7 @@ struct fails_on_copy {
fails_on_copy(const fails_on_copy&) { throw 0; };
};
using value_type = std::pair<int, fails_on_copy>;
using value_type = std::pair<const int, fails_on_copy>;
void
test01()

View File

@ -27,7 +27,8 @@ void
value()
{
typedef __gnu_cxx::throw_value_limit value_type;
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::pair<const value_type, value_type> pair_type;
typedef __gnu_cxx::throw_allocator_limit<pair_type> allocator_type;
typedef std::hash<value_type> hash_type;
typedef std::equal_to<value_type> pred_type;
typedef std::unordered_map<value_type, value_type, hash_type, pred_type, allocator_type> test_type;

View File

@ -27,7 +27,8 @@
int main()
{
typedef __gnu_cxx::throw_value_random value_type;
typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
typedef std::pair<const value_type, value_type> pair_type;
typedef __gnu_cxx::throw_allocator_random<pair_type> allocator_type;
typedef std::hash<value_type> hash_type;
typedef std::equal_to<value_type> pred_type;
typedef std::unordered_map<value_type, value_type, hash_type, pred_type, allocator_type> test_type;

View File

@ -27,7 +27,8 @@
int main()
{
typedef __gnu_cxx::throw_value_limit value_type;
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::pair<const value_type, value_type> pair_type;
typedef __gnu_cxx::throw_allocator_limit<pair_type> allocator_type;
typedef std::hash<value_type> hash_type;
typedef std::equal_to<value_type> pred_type;
typedef std::unordered_map<value_type, value_type, hash_type, pred_type, allocator_type> test_type;

View File

@ -28,15 +28,9 @@ struct MoveOnly
MoveOnly(MoveOnly&&) = default;
};
using hash = std::hash<int>;
using equal = std::equal_to<int>;
template<typename Alloc>
using test_type = std::unordered_multimap<int, MoveOnly, hash, equal, Alloc>;
void test01()
{
typedef test_type<std::allocator<MoveOnly>> uim;
typedef std::unordered_multimap<int, MoveOnly> uim;
std::vector<uim> v;
v.emplace_back(uim());
}

View File

@ -39,7 +39,7 @@ using __gnu_test::propagating_allocator;
void test01()
{
typedef propagating_allocator<T, false> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, false> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -51,7 +51,7 @@ void test01()
void test02()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -63,7 +63,7 @@ void test02()
void test03()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,

View File

@ -39,7 +39,7 @@ using __gnu_test::propagating_allocator;
void test01()
{
typedef propagating_allocator<T, false> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, false> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -54,7 +54,7 @@ void test01()
void test02()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,

View File

@ -43,11 +43,11 @@ bool operator<(const T& l, const T& r) { return l.i < r.i; }
using __gnu_test::SimpleAllocator;
template class std::unordered_multimap<T, T, hash, equal_to,
SimpleAllocator<T>>;
SimpleAllocator<std::pair<const T, T>>>;
void test01()
{
typedef SimpleAllocator<T> alloc_type;
typedef SimpleAllocator<std::pair<const T, T>> alloc_type;
typedef std::allocator_traits<alloc_type> traits_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v(alloc_type{});

View File

@ -39,7 +39,7 @@ using __gnu_test::uneq_allocator;
void test01()
{
typedef uneq_allocator<T> alloc_type;
typedef uneq_allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,
@ -53,7 +53,7 @@ void test01()
void test02()
{
typedef uneq_allocator<T> alloc_type;
typedef uneq_allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
v1.emplace(std::piecewise_construct,

View File

@ -25,9 +25,11 @@
using __gnu_test::propagating_allocator;
using __gnu_test::counter_type;
typedef std::pair<const counter_type, counter_type> value_type;
void test01()
{
typedef propagating_allocator<counter_type, false> alloc_type;
typedef propagating_allocator<value_type, false> alloc_type;
typedef __gnu_test::counter_type_hasher hash;
typedef std::unordered_multimap<counter_type, counter_type, hash,
std::equal_to<counter_type>,
@ -54,7 +56,7 @@ void test01()
void test02()
{
typedef propagating_allocator<counter_type, true> alloc_type;
typedef propagating_allocator<value_type, true> alloc_type;
typedef __gnu_test::counter_type_hasher hash;
typedef std::unordered_multimap<counter_type, counter_type, hash,
std::equal_to<counter_type>,

View File

@ -44,7 +44,7 @@ using __gnu_test::propagating_allocator;
void test01()
{
typedef std::allocator<T> alloc_type;
typedef std::allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1;
test_type v2;
@ -55,7 +55,7 @@ void test01()
void test02()
{
typedef std::allocator<T> alloc_type;
typedef std::allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_multimap<T, T, hash_t, equal_to, alloc_type> test_type;
test_type v1;
test_type v2;
@ -65,7 +65,7 @@ void test02()
void test03()
{
typedef std::allocator<T> alloc_type;
typedef std::allocator<std::pair<const T, T>> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to_t, alloc_type>
test_type;
test_type v1;
@ -76,7 +76,7 @@ void test03()
void test04()
{
typedef propagating_allocator<T, false> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, false> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
test_type v2(alloc_type(2));
@ -86,7 +86,7 @@ void test04()
void test05()
{
typedef propagating_allocator<T, true> alloc_type;
typedef propagating_allocator<std::pair<const T, T>, true> alloc_type;
typedef std::unordered_multimap<T, T, hash, equal_to, alloc_type> test_type;
test_type v1(alloc_type(1));
test_type v2(alloc_type(2));

View File

@ -27,7 +27,8 @@ void
value()
{
typedef __gnu_cxx::throw_value_limit value_type;
typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
typedef std::pair<const value_type, value_type> pair_type;
typedef __gnu_cxx::throw_allocator_limit<pair_type> allocator_type;
typedef std::hash<value_type> hash_type;
typedef std::equal_to<value_type> pred_type;
typedef std::unordered_multimap<value_type, value_type, hash_type, pred_type, allocator_type> test_type;

View File

@ -27,7 +27,8 @@
int main()
{
typedef __gnu_cxx::throw_value_random value_type;
typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
typedef std::pair<const value_type, value_type> pair_type;
typedef __gnu_cxx::throw_allocator_random<pair_type> allocator_type;
typedef std::hash<value_type> hash_type;
typedef std::equal_to<value_type> pred_type;
typedef std::unordered_multimap<value_type, value_type, hash_type, pred_type, allocator_type> test_type;

View File

@ -27,7 +27,8 @@
int main()
{
typedef __gnu_cxx::throw_value_limit value_type;
typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
typedef std::pair<const value_type, value_type> pair_type;
typedef __gnu_cxx::throw_allocator_random<pair_type> allocator_type;
typedef std::hash<value_type> hash_type;
typedef std::equal_to<value_type> pred_type;
typedef std::unordered_multimap<value_type, value_type, hash_type, pred_type, allocator_type> test_type;

View File

@ -1,4 +1,3 @@
// Copyright (C) 2011-2018 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@ -23,10 +22,12 @@
// { dg-do compile { target c++11 } }
using __gnu_test::ExplicitConsAlloc;
// libstdc++/50118
template class
std::unordered_multimap<int, int, std::hash<int>, std::equal_to<int>,
ExplicitConsAlloc<std::pair<const int, int>>>;
template class std::unordered_multimap<int, int, std::hash<int>,
std::equal_to<int>,
__gnu_test::ExplicitConsAlloc<int>>;
template class std::unordered_multimap<int, int, std::hash<int>,
std::equal_to<int>,
__gnu_test::ExplicitConsAlloc<char>>;
ExplicitConsAlloc<char>>;

View File

@ -24,7 +24,7 @@
int main()
{
std::map<int, int, std::less<int>,
__gnu_cxx::malloc_allocator<std::pair<int, int> > > allocs;
__gnu_cxx::malloc_allocator<std::pair<const int, int> > > allocs;
allocs[9] = 3;
std::vector<int, __gnu_cxx::malloc_allocator<int>> vec(10);
vec[5] = 42;