[libcxx] r277970 - Fix copy/move constructor annotation for the uses-allocator test types.

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Sun Aug 7 19:22:41 PDT 2016


Author: ericwf
Date: Sun Aug  7 21:22:41 2016
New Revision: 277970

URL: http://llvm.org/viewvc/llvm-project?rev=277970&view=rev
Log:
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.


Modified:
    libcxx/trunk/test/support/uses_alloc_types.hpp

Modified: libcxx/trunk/test/support/uses_alloc_types.hpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/uses_alloc_types.hpp?rev=277970&r1=277969&r2=277970&view=diff
==============================================================================
--- libcxx/trunk/test/support/uses_alloc_types.hpp (original)
+++ libcxx/trunk/test/support/uses_alloc_types.hpp Sun Aug  7 21:22:41 2016
@@ -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<>()) {}




More information about the cfe-commits mailing list