[libcxx] r260172 - Revert r260012 due to __gnu_cxx::hash_map breakage

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 8 15:47:13 PST 2016


Author: ericwf
Date: Mon Feb  8 17:47:13 2016
New Revision: 260172

URL: http://llvm.org/viewvc/llvm-project?rev=260172&view=rev
Log:
Revert r260012 due to __gnu_cxx::hash_map breakage

Removed:
    libcxx/trunk/test/libcxx/containers/unord/key_value_traits.pass.cpp
    libcxx/trunk/test/std/containers/unord/iterator_difference_type.pass.cpp
    libcxx/trunk/test/std/containers/unord/unord.map/incomplete_type.pass.cpp
    libcxx/trunk/test/std/containers/unord/unord.multimap/incomplete.pass.cpp
    libcxx/trunk/test/std/containers/unord/unord.multiset/incomplete.pass.cpp
    libcxx/trunk/test/std/containers/unord/unord.set/incomplete.pass.cpp
Modified:
    libcxx/trunk/include/__config
    libcxx/trunk/include/__hash_table
    libcxx/trunk/include/unordered_map

Modified: libcxx/trunk/include/__config
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=260172&r1=260171&r2=260172&view=diff
==============================================================================
--- libcxx/trunk/include/__config (original)
+++ libcxx/trunk/include/__config Mon Feb  8 17:47:13 2016
@@ -42,7 +42,6 @@
 // Fix undefined behavior in how std::list stores it's linked nodes.
 #define _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB
 #define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB
-#define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
 #endif
 
 #define _LIBCPP_CONCAT1(_LIBCPP_X,_LIBCPP_Y) _LIBCPP_X##_LIBCPP_Y

Modified: libcxx/trunk/include/__hash_table
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__hash_table?rev=260172&r1=260171&r2=260172&view=diff
==============================================================================
--- libcxx/trunk/include/__hash_table (original)
+++ libcxx/trunk/include/__hash_table Mon Feb  8 17:47:13 2016
@@ -17,7 +17,6 @@
 #include <iterator>
 #include <algorithm>
 #include <cmath>
-#include <utility>
 
 #include <__undef_min_max>
 #include <__undef___deallocate>
@@ -50,10 +49,10 @@ struct __hash_node
                  typename __rebind_pointer<_VoidPtr, __hash_node<_Tp, _VoidPtr> >::type
              >
 {
-    typedef _Tp __node_value_type;
+    typedef _Tp value_type;
 
     size_t     __hash_;
-    __node_value_type __value_;
+    value_type __value_;
 };
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -78,126 +77,23 @@ __next_hash_pow2(size_t __n)
 }
 
 template <class _Tp, class _Hash, class _Equal, class _Alloc> class __hash_table;
-
-template <class _NodePtr>      class _LIBCPP_TYPE_VIS_ONLY __hash_iterator;
 template <class _ConstNodePtr> class _LIBCPP_TYPE_VIS_ONLY __hash_const_iterator;
-template <class _NodePtr>      class _LIBCPP_TYPE_VIS_ONLY __hash_local_iterator;
-template <class _ConstNodePtr> class _LIBCPP_TYPE_VIS_ONLY __hash_const_local_iterator;
 template <class _HashIterator> class _LIBCPP_TYPE_VIS_ONLY __hash_map_iterator;
 template <class _HashIterator> class _LIBCPP_TYPE_VIS_ONLY __hash_map_const_iterator;
 
-#if __cplusplus >= 201103L
-template <class _Key, class _Tp>
-union __hash_value_type;
-#else
-template <class _Key, class _Tp>
-struct __hash_value_type;
-#endif
-
-template <class _Tp>
-struct __key_value_types {
-  static_assert(!is_reference<_Tp>::value && !is_const<_Tp>::value, "");
-  typedef _Tp key_type;
-  typedef _Tp __node_value_type;
-  typedef _Tp __container_value_type;
-  static const bool __is_map = false;
-};
-
-template <class _Key, class _Tp>
-struct __key_value_types<__hash_value_type<_Key, _Tp> > {
-  typedef _Key                                         key_type;
-  typedef _Tp                                          mapped_type;
-  typedef __hash_value_type<_Key, _Tp>                 __node_value_type;
-  typedef pair<const _Key, _Tp>                        __container_value_type;
-  typedef __container_value_type                       __map_value_type;
-  static const bool __is_map = true;
-};
-
-template <class _Tp, class _AllocPtr, class _KVTypes = __key_value_types<_Tp>,
-          bool = _KVTypes::__is_map>
-struct __map_pointer_types {};
-
-template <class _Tp, class _AllocPtr, class _KVTypes>
-struct __map_pointer_types<_Tp, _AllocPtr, _KVTypes, true> {
-  typedef typename _KVTypes::__map_value_type   _Mv;
-  typedef typename __rebind_pointer<_AllocPtr, _Mv>::type
-                                                       __map_value_type_pointer;
-  typedef typename __rebind_pointer<_AllocPtr, const _Mv>::type
-                                                 __const_map_value_type_pointer;
-};
-
-template <class _NodePtr, class _NodeT = typename pointer_traits<_NodePtr>::element_type>
-struct __hash_node_types;
-
-template <class _NodePtr, class _Tp, class _VoidPtr>
-struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> >
-    : public __key_value_types<_Tp>, __map_pointer_types<_Tp, _VoidPtr>
-
-{
-  typedef __key_value_types<_Tp>           __base;
-
-public:
-  typedef ptrdiff_t difference_type;
-  typedef size_t size_type;
-
-  typedef typename __rebind_pointer<_NodePtr, void>::type       __void_pointer;
-
-  typedef typename pointer_traits<_NodePtr>::element_type       __node_type;
-  typedef _NodePtr                                              __node_pointer;
-
-  typedef __hash_node_base<__node_pointer>                      __node_base_type;
-  typedef typename __rebind_pointer<_NodePtr, __node_base_type>::type
-                                                             __node_base_pointer;
-
-  typedef _Tp                                                 __node_value_type;
-  typedef typename __rebind_pointer<_VoidPtr, __node_value_type>::type
-                                                      __node_value_type_pointer;
-  typedef typename __rebind_pointer<_VoidPtr, const __node_value_type>::type
-                                                __const_node_value_type_pointer;
-private:
-    static_assert(!is_const<__node_type>::value,
-                "_NodePtr should never be a pointer to const");
-    static_assert((is_same<typename pointer_traits<_VoidPtr>::element_type, void>::value),
-                  "_VoidPtr does not point to unqualified void type");
-    static_assert((is_same<typename __rebind_pointer<_VoidPtr, __node_type>::type,
-                          _NodePtr>::value), "_VoidPtr does not rebind to _NodePtr.");
-};
-
-
-
-template <class _HashIterator>
-struct __hash_node_types_from_iterator;
-template <class _NodePtr>
-struct __hash_node_types_from_iterator<__hash_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};
-template <class _NodePtr>
-struct __hash_node_types_from_iterator<__hash_const_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};
-template <class _NodePtr>
-struct __hash_node_types_from_iterator<__hash_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};
-template <class _NodePtr>
-struct __hash_node_types_from_iterator<__hash_const_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};
-
-
-template <class _NodeValueTp, class _VoidPtr>
-struct __make_hash_node_types {
-  typedef __hash_node<_NodeValueTp, _VoidPtr> _NodeTp;
-  typedef typename __rebind_pointer<_VoidPtr, _NodeTp>::type _NodePtr;
-  typedef __hash_node_types<_NodePtr> type;
-};
-
 template <class _NodePtr>
 class _LIBCPP_TYPE_VIS_ONLY __hash_iterator
 {
-    typedef __hash_node_types<_NodePtr> _NodeTypes;
-    typedef _NodePtr                    __node_pointer;
+    typedef _NodePtr __node_pointer;
 
     __node_pointer            __node_;
 
 public:
-    typedef forward_iterator_tag                           iterator_category;
-    typedef typename _NodeTypes::__node_value_type         value_type;
-    typedef typename _NodeTypes::difference_type           difference_type;
-    typedef value_type&                                    reference;
-    typedef typename _NodeTypes::__node_value_type_pointer pointer;
+    typedef forward_iterator_tag                         iterator_category;
+    typedef typename pointer_traits<__node_pointer>::element_type::value_type value_type;
+    typedef typename pointer_traits<__node_pointer>::difference_type difference_type;
+    typedef value_type&                                  reference;
+    typedef typename __rebind_pointer<__node_pointer, value_type>::type pointer;
 
     _LIBCPP_INLINE_VISIBILITY __hash_iterator() _NOEXCEPT
 #if _LIBCPP_STD_VER > 11
@@ -306,22 +202,25 @@ private:
     template <class, class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY unordered_multimap;
 };
 
-template <class _NodePtr>
+template <class _ConstNodePtr>
 class _LIBCPP_TYPE_VIS_ONLY __hash_const_iterator
 {
-    static_assert(!is_const<typename pointer_traits<_NodePtr>::element_type>::value, "");
-    typedef __hash_node_types<_NodePtr> _NodeTypes;
-    typedef _NodePtr __node_pointer;
-    typedef __hash_iterator<_NodePtr> __non_const_iterator;
-    __node_pointer __node_;
+    typedef _ConstNodePtr __node_pointer;
 
-public:
-    typedef forward_iterator_tag                                 iterator_category;
-    typedef typename _NodeTypes::__node_value_type               value_type;
-    typedef typename _NodeTypes::difference_type                 difference_type;
-    typedef const value_type&                                    reference;
-    typedef typename _NodeTypes::__const_node_value_type_pointer pointer;
+    __node_pointer         __node_;
 
+    typedef typename remove_const<
+        typename pointer_traits<__node_pointer>::element_type
+                                 >::type __node;
+
+public:
+    typedef forward_iterator_tag                       iterator_category;
+    typedef typename __node::value_type                value_type;
+    typedef typename pointer_traits<__node_pointer>::difference_type difference_type;
+    typedef const value_type&                          reference;
+    typedef typename __rebind_pointer<__node_pointer, const value_type>::type pointer;
+    typedef typename __rebind_pointer<__node_pointer, __node>::type __non_const_node_pointer;
+    typedef __hash_iterator<__non_const_node_pointer> __non_const_iterator;
 
     _LIBCPP_INLINE_VISIBILITY __hash_const_iterator() _NOEXCEPT
 #if _LIBCPP_STD_VER > 11
@@ -437,22 +336,24 @@ private:
     template <class, class, class, class, class> friend class _LIBCPP_TYPE_VIS_ONLY unordered_multimap;
 };
 
+template <class _ConstNodePtr> class _LIBCPP_TYPE_VIS_ONLY __hash_const_local_iterator;
+
 template <class _NodePtr>
 class _LIBCPP_TYPE_VIS_ONLY __hash_local_iterator
 {
-    typedef __hash_node_types<_NodePtr> _NodeTypes;
-    typedef _NodePtr                    __node_pointer;
+    typedef _NodePtr __node_pointer;
 
     __node_pointer         __node_;
     size_t                 __bucket_;
     size_t                 __bucket_count_;
 
+    typedef pointer_traits<__node_pointer>          __pointer_traits;
 public:
     typedef forward_iterator_tag                                iterator_category;
-    typedef typename _NodeTypes::__node_value_type              value_type;
-    typedef typename _NodeTypes::difference_type                difference_type;
+    typedef typename __pointer_traits::element_type::value_type value_type;
+    typedef typename __pointer_traits::difference_type          difference_type;
     typedef value_type&                                         reference;
-    typedef typename _NodeTypes::__node_value_type_pointer      pointer;
+    typedef typename __rebind_pointer<__node_pointer, value_type>::type pointer;
 
     _LIBCPP_INLINE_VISIBILITY __hash_local_iterator() _NOEXCEPT
     {
@@ -575,8 +476,7 @@ private:
 template <class _ConstNodePtr>
 class _LIBCPP_TYPE_VIS_ONLY __hash_const_local_iterator
 {
-    typedef __hash_node_types<_ConstNodePtr> _NodeTypes;
-    typedef _ConstNodePtr                    __node_pointer;
+    typedef _ConstNodePtr __node_pointer;
 
     __node_pointer         __node_;
     size_t                 __bucket_;
@@ -591,11 +491,14 @@ class _LIBCPP_TYPE_VIS_ONLY __hash_const
     typedef __hash_local_iterator<__non_const_node_pointer>
                                                     __non_const_iterator;
 public:
-    typedef forward_iterator_tag                                 iterator_category;
-    typedef typename _NodeTypes::__node_value_type               value_type;
-    typedef typename _NodeTypes::difference_type                 difference_type;
-    typedef const value_type&                                    reference;
-    typedef typename _NodeTypes::__const_node_value_type_pointer pointer;
+    typedef forward_iterator_tag                       iterator_category;
+    typedef typename remove_const<
+                        typename __pointer_traits::element_type::value_type
+                     >::type                           value_type;
+    typedef typename __pointer_traits::difference_type difference_type;
+    typedef const value_type&                          reference;
+    typedef typename __rebind_pointer<__node_pointer, const value_type>::type
+        pointer;
 
 
     _LIBCPP_INLINE_VISIBILITY __hash_const_local_iterator() _NOEXCEPT
@@ -783,7 +686,7 @@ class __hash_node_destructor
 {
     typedef _Alloc                                          allocator_type;
     typedef allocator_traits<allocator_type>                __alloc_traits;
-
+    typedef typename __alloc_traits::value_type::value_type value_type;
 public:
     typedef typename __alloc_traits::pointer                pointer;
 private:
@@ -825,42 +728,23 @@ public:
 
 private:
     typedef allocator_traits<allocator_type> __alloc_traits;
-    typedef typename
-      __make_hash_node_types<value_type, typename __alloc_traits::void_pointer>::type
-                                                                     _NodeTypes;
 public:
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
-#ifndef _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
     typedef typename __alloc_traits::size_type       size_type;
-#else
-    typedef typename _NodeTypes::size_type           size_type;
-#endif
-    typedef typename _NodeTypes::difference_type     difference_type;
+    typedef typename __alloc_traits::difference_type difference_type;
 public:
     // Create __node
-
-    typedef typename _NodeTypes::__node_type __node;
+    typedef __hash_node<value_type, typename __alloc_traits::void_pointer> __node;
     typedef typename __rebind_alloc_helper<__alloc_traits, __node>::type __node_allocator;
     typedef allocator_traits<__node_allocator>       __node_traits;
-    typedef typename _NodeTypes::__node_pointer      __node_pointer;
-    typedef typename _NodeTypes::__node_pointer      __node_const_pointer;
-    typedef typename _NodeTypes::__node_base_type    __first_node;
-    typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
-
-private:
-    // check for sane allocator pointer rebinding semantics. Rebinding the
-    // allocator for a new pointer type should be exactly the same as rebinding
-    // the pointer using 'pointer_traits'.
-    static_assert((is_same<__node_pointer, typename __node_traits::pointer>::value),
-                  "Allocator does not rebind pointers in a sane manner.");
-    typedef typename __rebind_alloc_helper<__node_traits, __first_node>::type
-        __node_base_allocator;
-    typedef allocator_traits<__node_base_allocator> __node_base_traits;
-    static_assert((is_same<__node_base_pointer, typename __node_base_traits::pointer>::value),
-                 "Allocator does not rebind pointers in a sane manner.");
+    typedef typename __node_traits::pointer          __node_pointer;
+    typedef typename __node_traits::pointer          __node_const_pointer;
+    typedef __hash_node_base<__node_pointer>         __first_node;
+    typedef typename __rebind_pointer<__node_pointer, __first_node>::type
+        __node_base_pointer;
 
 private:
 
@@ -871,10 +755,10 @@ private:
     typedef typename __bucket_list_deleter::pointer __node_pointer_pointer;
 
     // --- Member data begin ---
-    __bucket_list                                         __bucket_list_;
-    __compressed_pair<__first_node, __node_allocator>     __p1_;
-    __compressed_pair<size_type, hasher>                  __p2_;
-    __compressed_pair<float, key_equal>                   __p3_;
+    __bucket_list                                     __bucket_list_;
+    __compressed_pair<__first_node, __node_allocator> __p1_;
+    __compressed_pair<size_type, hasher>              __p2_;
+    __compressed_pair<float, key_equal>               __p3_;
     // --- Member data end ---
 
     _LIBCPP_INLINE_VISIBILITY

Modified: libcxx/trunk/include/unordered_map
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/unordered_map?rev=260172&r1=260171&r2=260172&view=diff
==============================================================================
--- libcxx/trunk/include/unordered_map (original)
+++ libcxx/trunk/include/unordered_map Mon Feb  8 17:47:13 2016
@@ -384,7 +384,6 @@ template <class _Key, class _Cp, class _
 class __unordered_map_hasher
     : private _Hash
 {
-  typedef typename __key_value_types<_Cp>::__map_value_type _PairT;
 public:
     _LIBCPP_INLINE_VISIBILITY
     __unordered_map_hasher()
@@ -415,7 +414,6 @@ class __unordered_map_hasher<_Key, _Cp,
 {
     _Hash __hash_;
 
-    typedef typename __key_value_types<_Cp>::__map_value_type _PairT;
 public:
     _LIBCPP_INLINE_VISIBILITY
     __unordered_map_hasher()
@@ -457,7 +455,6 @@ template <class _Key, class _Cp, class _
 class __unordered_map_equal
     : private _Pred
 {
-   typedef typename __key_value_types<_Cp>::__map_value_type _PairT;
 public:
     _LIBCPP_INLINE_VISIBILITY
     __unordered_map_equal()
@@ -491,7 +488,6 @@ class __unordered_map_equal<_Key, _Cp, _
 {
     _Pred __pred_;
 
-    typedef typename __key_value_types<_Cp>::__map_value_type _PairT;
 public:
     _LIBCPP_INLINE_VISIBILITY
     __unordered_map_equal()
@@ -512,9 +508,6 @@ public:
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Key& __x, const _Cp& __y) const
         {return __pred_(__x, __y.__cc.first);}
-  _LIBCPP_INLINE_VISIBILITY
-    bool operator()(const _Key& __x, const _PairT& __y) const
-        {return __pred_(__x, __y.first);}
     void swap(__unordered_map_equal&__y)
         _NOEXCEPT_(__is_nothrow_swappable<_Pred>::value)
     {
@@ -538,11 +531,12 @@ class __hash_map_node_destructor
 {
     typedef _Alloc                              allocator_type;
     typedef allocator_traits<allocator_type>    __alloc_traits;
-
+    typedef typename __alloc_traits::value_type::value_type value_type;
 public:
-
-    typedef typename __alloc_traits::pointer       pointer;
+    typedef typename __alloc_traits::pointer    pointer;
 private:
+    typedef typename value_type::value_type::first_type     first_type;
+    typedef typename value_type::value_type::second_type    second_type;
 
     allocator_type& __na_;
 
@@ -662,14 +656,15 @@ class _LIBCPP_TYPE_VIS_ONLY __hash_map_i
 {
     _HashIterator __i_;
 
-    typedef  __hash_node_types_from_iterator<_HashIterator> _NodeTypes;
-
+    typedef const typename _HashIterator::value_type::value_type::first_type key_type;
+    typedef typename _HashIterator::value_type::value_type::second_type      mapped_type;
 public:
     typedef forward_iterator_tag                                 iterator_category;
-    typedef typename _NodeTypes::__map_value_type                value_type;
-    typedef typename _NodeTypes::difference_type                 difference_type;
+    typedef pair<key_type, mapped_type>                          value_type;
+    typedef typename _HashIterator::difference_type              difference_type;
     typedef value_type&                                          reference;
-    typedef typename _NodeTypes::__map_value_type_pointer       pointer;
+    typedef typename __rebind_pointer<typename _HashIterator::pointer, value_type>::type
+        pointer;
 
     _LIBCPP_INLINE_VISIBILITY
     __hash_map_iterator() _NOEXCEPT {}
@@ -711,14 +706,15 @@ class _LIBCPP_TYPE_VIS_ONLY __hash_map_c
 {
     _HashIterator __i_;
 
-    typedef  __hash_node_types_from_iterator<_HashIterator> _NodeTypes;
-
+    typedef const typename _HashIterator::value_type::value_type::first_type key_type;
+    typedef typename _HashIterator::value_type::value_type::second_type      mapped_type;
 public:
     typedef forward_iterator_tag                                 iterator_category;
-    typedef typename _NodeTypes::__map_value_type                value_type;
-    typedef typename _NodeTypes::difference_type                 difference_type;
+    typedef pair<key_type, mapped_type>                          value_type;
+    typedef typename _HashIterator::difference_type              difference_type;
     typedef const value_type&                                    reference;
-    typedef typename _NodeTypes::__const_map_value_type_pointer  pointer;
+    typedef typename __rebind_pointer<typename _HashIterator::pointer, const value_type>::type
+        pointer;
 
     _LIBCPP_INLINE_VISIBILITY
     __hash_map_const_iterator() _NOEXCEPT {}
@@ -800,8 +796,8 @@ private:
 public:
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
-    typedef typename __table::size_type              size_type;
-    typedef typename __table::difference_type        difference_type;
+    typedef typename __alloc_traits::size_type       size_type;
+    typedef typename __alloc_traits::difference_type difference_type;
 
     typedef __hash_map_iterator<typename __table::iterator>       iterator;
     typedef __hash_map_const_iterator<typename __table::const_iterator> const_iterator;
@@ -1645,14 +1641,11 @@ private:
     typedef __hash_map_node_destructor<__node_allocator>   _Dp;
     typedef unique_ptr<__node, _Dp>                         __node_holder;
     typedef allocator_traits<allocator_type>               __alloc_traits;
-    static_assert((is_same<typename __node_traits::size_type,
-                          typename __alloc_traits::size_type>::value),
-                 "Allocator uses different size_type for different types");
 public:
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
-    typedef typename __table::size_type              size_type;
-    typedef typename __table::difference_type        difference_type;
+    typedef typename __alloc_traits::size_type       size_type;
+    typedef typename __alloc_traits::difference_type difference_type;
 
     typedef __hash_map_iterator<typename __table::iterator>       iterator;
     typedef __hash_map_const_iterator<typename __table::const_iterator> const_iterator;

Removed: libcxx/trunk/test/libcxx/containers/unord/key_value_traits.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/containers/unord/key_value_traits.pass.cpp?rev=260171&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/containers/unord/key_value_traits.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/containers/unord/key_value_traits.pass.cpp (removed)
@@ -1,59 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <__hash_table>
-#include <unordered_map>
-#include <unordered_set>
-#include <type_traits>
-
-#include "test_macros.h"
-#include "min_allocator.h"
-
-void testKeyValueTrait() {
-  {
-    typedef int Tp;
-    typedef std::__key_value_types<Tp> Traits;
-    static_assert((std::is_same<Traits::key_type, int>::value), "");
-    static_assert((std::is_same<Traits::__node_value_type, Tp>::value), "");
-    static_assert((std::is_same<Traits::__container_value_type, Tp>::value), "");
-    static_assert(Traits::__is_map == false, "");
-  }
-  {
-    typedef std::pair<int, int> Tp;
-    typedef std::__key_value_types<Tp> Traits;
-    static_assert((std::is_same<Traits::key_type, Tp>::value), "");
-    static_assert((std::is_same<Traits::__node_value_type, Tp>::value), "");
-    static_assert((std::is_same<Traits::__container_value_type, Tp>::value), "");
-    static_assert(Traits::__is_map == false, "");
-  }
-  {
-    typedef std::pair<const int, int> Tp;
-    typedef std::__key_value_types<Tp> Traits;
-    static_assert((std::is_same<Traits::key_type, Tp>::value), "");
-    static_assert((std::is_same<Traits::__node_value_type, Tp>::value), "");
-    static_assert((std::is_same<Traits::__container_value_type, Tp>::value), "");
-    static_assert(Traits::__is_map == false, "");
-  }
-  {
-    typedef std::__hash_value_type<int, int> Tp;
-    typedef std::__key_value_types<Tp> Traits;
-    static_assert((std::is_same<Traits::key_type, int>::value), "");
-    static_assert((std::is_same<Traits::mapped_type, int>::value), "");
-    static_assert((std::is_same<Traits::__node_value_type, Tp>::value), "");
-    static_assert((std::is_same<Traits::__container_value_type,
-                               std::pair<const int, int> >::value), "");
-    static_assert((std::is_same<Traits::__map_value_type,
-                               std::pair<const int, int> >::value), "");
-    static_assert(Traits::__is_map == true, "");
-  }
-}
-
-int main() {
-  testKeyValueTrait();
-}

Removed: libcxx/trunk/test/std/containers/unord/iterator_difference_type.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/iterator_difference_type.pass.cpp?rev=260171&view=auto
==============================================================================
--- libcxx/trunk/test/std/containers/unord/iterator_difference_type.pass.cpp (original)
+++ libcxx/trunk/test/std/containers/unord/iterator_difference_type.pass.cpp (removed)
@@ -1,154 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <unordered_map>
-#include <unordered_set>
-#include <type_traits>
-
-#include "test_macros.h"
-#include "min_allocator.h"
-#include "test_allocator.h"
-
-
-template <class Map, class ValueTp, class PtrT, class CPtrT>
-void testUnorderedMap() {
-  typedef typename Map::difference_type Diff;
-  {
-    typedef typename Map::iterator It;
-    static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
-    static_assert((std::is_same<typename It::reference, ValueTp&>::value), "");
-    static_assert((std::is_same<typename It::pointer, PtrT>::value), "");
-    static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
-  }
-  {
-    typedef typename Map::const_iterator It;
-    static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
-    static_assert((std::is_same<typename It::reference, ValueTp const&>::value), "");
-    static_assert((std::is_same<typename It::pointer, CPtrT>::value), "");
-    static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
-  }
-  {
-    typedef typename Map::local_iterator It;
-    static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
-    static_assert((std::is_same<typename It::reference, ValueTp&>::value), "");
-    static_assert((std::is_same<typename It::pointer, PtrT>::value), "");
-    static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
-  }
-  {
-    typedef typename Map::const_local_iterator It;
-    static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
-    static_assert((std::is_same<typename It::reference, ValueTp const&>::value), "");
-    static_assert((std::is_same<typename It::pointer, CPtrT>::value), "");
-    static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
-  }
-}
-
-
-template <class Set, class ValueTp, class CPtrT>
-void testUnorderedSet() {
-  static_assert((std::is_same<typename Set::iterator,
-                             typename Set::const_iterator>::value), "");
-  static_assert((std::is_same<typename Set::local_iterator,
-                             typename Set::const_local_iterator>::value), "");
-  typedef typename Set::difference_type Diff;
-  {
-    typedef typename Set::iterator It;
-    static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
-    static_assert((std::is_same<typename It::reference, ValueTp const&>::value), "");
-    static_assert((std::is_same<typename It::pointer, CPtrT>::value), "");
-    static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
-
-  }
-  {
-    typedef typename Set::local_iterator It;
-    static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
-    static_assert((std::is_same<typename It::reference, ValueTp const&>::value), "");
-    static_assert((std::is_same<typename It::pointer, CPtrT>::value), "");
-    static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
-  }
-}
-
-int main() {
-  {
-    typedef std::unordered_map<int, int> Map;
-    typedef std::pair<const int, int> ValueTp;
-    testUnorderedMap<Map, ValueTp, ValueTp*, ValueTp const*>();
-  }
-  {
-    typedef std::pair<const int, int> ValueTp;
-    typedef test_allocator<ValueTp> Alloc;
-    typedef std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, Alloc> Map;
-    testUnorderedMap<Map, ValueTp, ValueTp*, ValueTp const*>();
-  }
-#if TEST_STD_VER >= 11
-  {
-    typedef std::pair<const int, int> ValueTp;
-    typedef min_allocator<ValueTp> Alloc;
-    typedef std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, Alloc> Map;
-    testUnorderedMap<Map, ValueTp, min_pointer<ValueTp>, min_pointer<const ValueTp>>();
-  }
-#endif
-  {
-    typedef std::unordered_multimap<int, int> Map;
-    typedef std::pair<const int, int> ValueTp;
-    testUnorderedMap<Map, ValueTp, ValueTp*, ValueTp const*>();
-  }
-  {
-    typedef std::pair<const int, int> ValueTp;
-    typedef test_allocator<ValueTp> Alloc;
-    typedef std::unordered_multimap<int, int, std::hash<int>, std::equal_to<int>, Alloc> Map;
-    testUnorderedMap<Map, ValueTp, ValueTp*, ValueTp const*>();
-  }
-#if TEST_STD_VER >= 11
-  {
-    typedef std::pair<const int, int> ValueTp;
-    typedef min_allocator<ValueTp> Alloc;
-    typedef std::unordered_multimap<int, int, std::hash<int>, std::equal_to<int>, Alloc> Map;
-    testUnorderedMap<Map, ValueTp, min_pointer<ValueTp>, min_pointer<const ValueTp>>();
-  }
-#endif
-  {
-    typedef int ValueTp;
-    typedef std::unordered_set<ValueTp> Set;
-    testUnorderedSet<Set, ValueTp, ValueTp const*>();
-  }
-  {
-    typedef int ValueTp;
-    typedef test_allocator<ValueTp> Alloc;
-    typedef std::unordered_set<ValueTp, std::hash<ValueTp>, std::equal_to<ValueTp>, Alloc> Set;
-    testUnorderedSet<Set, ValueTp, ValueTp const*>();
-  }
-#if TEST_STD_VER >= 11
-  {
-    typedef int ValueTp;
-    typedef min_allocator<ValueTp> Alloc;
-    typedef std::unordered_set<ValueTp, std::hash<ValueTp>, std::equal_to<ValueTp>, Alloc> Set;
-    testUnorderedSet<Set, ValueTp, min_pointer<const ValueTp>>();
-  }
-#endif
-  {
-    typedef int ValueTp;
-    typedef std::unordered_multiset<ValueTp> Set;
-    testUnorderedSet<Set, ValueTp, ValueTp const*>();
-  }
-  {
-    typedef int ValueTp;
-    typedef test_allocator<ValueTp> Alloc;
-    typedef std::unordered_multiset<ValueTp, std::hash<ValueTp>, std::equal_to<ValueTp>, Alloc> Set;
-    testUnorderedSet<Set, ValueTp, ValueTp const*>();
-  }
-#if TEST_STD_VER >= 11
-  {
-    typedef int ValueTp;
-    typedef min_allocator<ValueTp> Alloc;
-    typedef std::unordered_multiset<ValueTp, std::hash<ValueTp>, std::equal_to<ValueTp>, Alloc> Set;
-    testUnorderedSet<Set, ValueTp, min_pointer<const ValueTp>>();
-  }
-#endif
-}

Removed: libcxx/trunk/test/std/containers/unord/unord.map/incomplete_type.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.map/incomplete_type.pass.cpp?rev=260171&view=auto
==============================================================================
--- libcxx/trunk/test/std/containers/unord/unord.map/incomplete_type.pass.cpp (original)
+++ libcxx/trunk/test/std/containers/unord/unord.map/incomplete_type.pass.cpp (removed)
@@ -1,37 +0,0 @@
-
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <unordered_map>
-
-// Check that std::unordered_map and it's iterators can be instantiated with an incomplete
-// type.
-
-#include <unordered_map>
-
-template <class Tp>
-struct MyHash {
-  MyHash() {}
-  std::size_t operator()(Tp const&) const {return 42;}
-};
-
-struct A {
-    typedef std::unordered_map<A, A, MyHash<A> > Map;
-    Map m;
-    Map::iterator it;
-    Map::const_iterator cit;
-    Map::local_iterator lit;
-    Map::const_local_iterator clit;
-};
-
-inline bool operator==(A const& L, A const& R) { return &L == &R; }
-
-int main() {
-    A a;
-}

Removed: libcxx/trunk/test/std/containers/unord/unord.multimap/incomplete.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multimap/incomplete.pass.cpp?rev=260171&view=auto
==============================================================================
--- libcxx/trunk/test/std/containers/unord/unord.multimap/incomplete.pass.cpp (original)
+++ libcxx/trunk/test/std/containers/unord/unord.multimap/incomplete.pass.cpp (removed)
@@ -1,37 +0,0 @@
-
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <unordered_map>
-
-// Check that std::unordered_multimap and it's iterators can be instantiated with an incomplete
-// type.
-
-#include <unordered_map>
-
-template <class Tp>
-struct MyHash {
-  MyHash() {}
-  std::size_t operator()(Tp const&) const {return 42;}
-};
-
-struct A {
-    typedef std::unordered_multimap<A, A, MyHash<A> > Map;
-    Map m;
-    Map::iterator it;
-    Map::const_iterator cit;
-    Map::local_iterator lit;
-    Map::const_local_iterator clit;
-};
-
-inline bool operator==(A const& L, A const& R) { return &L == &R; }
-
-int main() {
-    A a;
-}

Removed: libcxx/trunk/test/std/containers/unord/unord.multiset/incomplete.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multiset/incomplete.pass.cpp?rev=260171&view=auto
==============================================================================
--- libcxx/trunk/test/std/containers/unord/unord.multiset/incomplete.pass.cpp (original)
+++ libcxx/trunk/test/std/containers/unord/unord.multiset/incomplete.pass.cpp (removed)
@@ -1,38 +0,0 @@
-
-
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <unordered_set>
-
-// Check that std::unordered_multiset and it's iterators can be instantiated with an incomplete
-// type.
-
-#include <unordered_set>
-
-template <class Tp>
-struct MyHash {
-  MyHash() {}
-  std::size_t operator()(Tp const&) const {return 42;}
-};
-
-struct A {
-    typedef std::unordered_multiset<A, MyHash<A> > Map;
-    Map m;
-    Map::iterator it;
-    Map::const_iterator cit;
-    Map::local_iterator lit;
-    Map::const_local_iterator clit;
-};
-
-inline bool operator==(A const& L, A const& R) { return &L == &R; }
-
-int main() {
-    A a;
-}

Removed: libcxx/trunk/test/std/containers/unord/unord.set/incomplete.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.set/incomplete.pass.cpp?rev=260171&view=auto
==============================================================================
--- libcxx/trunk/test/std/containers/unord/unord.set/incomplete.pass.cpp (original)
+++ libcxx/trunk/test/std/containers/unord/unord.set/incomplete.pass.cpp (removed)
@@ -1,38 +0,0 @@
-
-
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <unordered_set>
-
-// Check that std::unordered_set and it's iterators can be instantiated with an incomplete
-// type.
-
-#include <unordered_set>
-
-template <class Tp>
-struct MyHash {
-  MyHash() {}
-  std::size_t operator()(Tp const&) const {return 42;}
-};
-
-struct A {
-    typedef std::unordered_set<A, MyHash<A> > Map;
-    Map m;
-    Map::iterator it;
-    Map::const_iterator cit;
-    Map::local_iterator lit;
-    Map::const_local_iterator clit;
-};
-
-inline bool operator==(A const& L, A const& R) { return &L == &R; }
-
-int main() {
-    A a;
-}




More information about the cfe-commits mailing list