summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-08-08 02:22:41 +0000
committerEric Fiselier <eric@efcs.ca>2016-08-08 02:22:41 +0000
commit1d711627b4977ff9aef83d61c5fc0c510f561dcb (patch)
treeee8c2a535d4dbba324e4d9f819019331bcf13b25
parent2a65dd1ba608aa2477a397f58194c505ba69cf83 (diff)
downloadbcm5719-llvm-1d711627b4977ff9aef83d61c5fc0c510f561dcb.tar.gz
bcm5719-llvm-1d711627b4977ff9aef83d61c5fc0c510f561dcb.zip
Fix copy/move constructor annotation for the uses-allocator test types.
Previously the copy/move constructors of the test types did not properly set the arg_id to T const& or T&& respectivly. llvm-svn: 277970
-rw-r--r--libcxx/test/support/uses_alloc_types.hpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/libcxx/test/support/uses_alloc_types.hpp b/libcxx/test/support/uses_alloc_types.hpp
index 834e57729a7..0961f729fbd 100644
--- a/libcxx/test/support/uses_alloc_types.hpp
+++ b/libcxx/test/support/uses_alloc_types.hpp
@@ -119,7 +119,7 @@ using detail::EnableIfB;
struct AllocLastTag {};
-template <class Alloc>
+template <class Self, class Alloc>
struct UsesAllocatorTestBase {
public:
using CtorAlloc = typename std::conditional<
@@ -153,6 +153,16 @@ protected:
: args_id(aid), constructor_called(UA_None), allocator()
{}
+ UsesAllocatorTestBase(UsesAllocatorTestBase const&)
+ : args_id(&makeArgumentID<Self const&>()), constructor_called(UA_None),
+ allocator()
+ {}
+
+ UsesAllocatorTestBase(UsesAllocatorTestBase&&)
+ : args_id(&makeArgumentID<Self&&>()), constructor_called(UA_None),
+ allocator()
+ {}
+
template <class ...Args>
UsesAllocatorTestBase(std::allocator_arg_t, CtorAlloc const& a, Args&&...)
: args_id(&makeArgumentID<Args&&...>()),
@@ -188,12 +198,12 @@ private:
};
template <class Alloc, size_t Arity>
-class UsesAllocatorV1 : public UsesAllocatorTestBase<Alloc>
+class UsesAllocatorV1 : public UsesAllocatorTestBase<UsesAllocatorV1<Alloc, Arity>, Alloc>
{
public:
typedef Alloc allocator_type;
- using Base = UsesAllocatorTestBase<Alloc>;
+ using Base = UsesAllocatorTestBase<UsesAllocatorV1, Alloc>;
using CtorAlloc = typename Base::CtorAlloc;
UsesAllocatorV1() : Base(&makeArgumentID<>()) {}
@@ -218,12 +228,12 @@ public:
template <class Alloc, size_t Arity>
-class UsesAllocatorV2 : public UsesAllocatorTestBase<Alloc>
+class UsesAllocatorV2 : public UsesAllocatorTestBase<UsesAllocatorV2<Alloc, Arity>, Alloc>
{
public:
typedef Alloc allocator_type;
- using Base = UsesAllocatorTestBase<Alloc>;
+ using Base = UsesAllocatorTestBase<UsesAllocatorV2, Alloc>;
using CtorAlloc = typename Base::CtorAlloc;
UsesAllocatorV2() : Base(&makeArgumentID<>()) {}
@@ -240,12 +250,12 @@ public:
};
template <class Alloc, size_t Arity>
-class UsesAllocatorV3 : public UsesAllocatorTestBase<Alloc>
+class UsesAllocatorV3 : public UsesAllocatorTestBase<UsesAllocatorV3<Alloc, Arity>, Alloc>
{
public:
typedef Alloc allocator_type;
- using Base = UsesAllocatorTestBase<Alloc>;
+ using Base = UsesAllocatorTestBase<UsesAllocatorV3, Alloc>;
using CtorAlloc = typename Base::CtorAlloc;
UsesAllocatorV3() : Base(&makeArgumentID<>()) {}
@@ -268,12 +278,12 @@ public:
};
template <class Alloc, size_t Arity>
-class NotUsesAllocator : public UsesAllocatorTestBase<Alloc>
+class NotUsesAllocator : public UsesAllocatorTestBase<NotUsesAllocator<Alloc, Arity>, Alloc>
{
public:
// no allocator_type typedef provided
- using Base = UsesAllocatorTestBase<Alloc>;
+ using Base = UsesAllocatorTestBase<NotUsesAllocator, Alloc>;
using CtorAlloc = typename Base::CtorAlloc;
NotUsesAllocator() : Base(&makeArgumentID<>()) {}
OpenPOWER on IntegriCloud