Commit 78ed0f80 by Jonathan Wakely Committed by Jonathan Wakely

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
parent e7f2d0bd
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.
......
......@@ -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();
......
......@@ -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);
}
......@@ -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];
}
......@@ -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());
}
......
......@@ -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,
......
......@@ -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,
......
......@@ -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{});
......
......@@ -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,
......
......@@ -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>,
......
......@@ -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));
......
......@@ -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()
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
......@@ -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());
}
......@@ -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,
......
......@@ -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,
......
......@@ -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{});
......
......@@ -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,
......
......@@ -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>,
......
......@@ -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));
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
// 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>>;
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment