OSDN Git Service

2012-07-02 Paolo Carlini <paolo.carlini@oracle.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jul 2012 01:37:48 +0000 (01:37 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jul 2012 01:37:48 +0000 (01:37 +0000)
Revert:
2011-10-04  Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/49561
* include/bits/stl_list.h (_List_base<>::_List_impl::_M_size):
Add in C++0x mode.
(_List_base<>::_List_impl, _List_base<>::_M_get_node,
_List_base<>::_M_put_node, _List_base<>::_List_base(_List_base&&),
list<>::size, list<>::swap, list<>::splice): Use it.
(operator==(const list<>&, const list<>&)): Rewrite in C++0x mode.
* include/bits/list.tcc (list<>::erase): Likewise.
(list<>::merge): Adjust in C++0x mode.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust dg-error line number.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_2_neg.cc: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@189186 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/list.tcc
libstdc++-v3/include/bits/stl_list.h
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc

index 7d6dc05..f74a62b 100644 (file)
@@ -1,3 +1,26 @@
+2012-07-02  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       Revert:
+       2011-10-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/49561
+       * include/bits/stl_list.h (_List_base<>::_List_impl::_M_size):
+       Add in C++0x mode.
+       (_List_base<>::_List_impl, _List_base<>::_M_get_node,
+       _List_base<>::_M_put_node, _List_base<>::_List_base(_List_base&&),
+       list<>::size, list<>::swap, list<>::splice): Use it.
+       (operator==(const list<>&, const list<>&)): Rewrite in C++0x mode.
+       * include/bits/list.tcc (list<>::erase): Likewise.
+       (list<>::merge): Adjust in C++0x mode.
+       * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+       Adjust dg-error line number.
+       * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+       Likewise.
+       * testsuite/23_containers/list/requirements/dr438/
+       constructor_1_neg.cc: Likewise.
+       * testsuite/23_containers/list/requirements/dr438/
+       constructor_2_neg.cc: Likewise.
+
 2012-06-19  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        PR libstdc++/53270
index 55156bb..727e82d 100644 (file)
@@ -1,7 +1,7 @@
 // List implementation (out of line) -*- C++ -*-
 
 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -139,14 +139,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
     list<_Tp, _Alloc>::
     resize(size_type __new_size)
     {
-      if (__new_size > size())
-       _M_default_append(__new_size - size());
-      else if (__new_size < size())
-       {
-         iterator __i = begin();
-         std::advance(__i, __new_size);
-         erase(__i, end());
-       }
+      iterator __i = begin();
+      size_type __len = 0;
+      for (; __i != end() && __len < __new_size; ++__i, ++__len)
+        ;
+      if (__len == __new_size)
+        erase(__i, end());
+      else                          // __i == end()
+       _M_default_append(__new_size - __len);
     }
 
   template<typename _Tp, typename _Alloc>
@@ -154,14 +154,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
     list<_Tp, _Alloc>::
     resize(size_type __new_size, const value_type& __x)
     {
-      if (__new_size > size())
-       insert(end(), __new_size - size(), __x);
-      else if (__new_size < size())
-       {
-         iterator __i = begin();
-         std::advance(__i, __new_size);
-         erase(__i, end());
-       }
+      iterator __i = begin();
+      size_type __len = 0;
+      for (; __i != end() && __len < __new_size; ++__i, ++__len)
+        ;
+      if (__len == __new_size)
+        erase(__i, end());
+      else                          // __i == end()
+        insert(end(), __new_size - __len, __x);
     }
 #else
   template<typename _Tp, typename _Alloc>
@@ -312,11 +312,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
              ++__first1;
          if (__first2 != __last2)
            _M_transfer(__last1, __first2, __last2);
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-         this->_M_impl._M_size += __x.size();
-         __x._M_impl._M_size = 0;
-#endif
        }
     }
 
@@ -351,11 +346,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
                ++__first1;
            if (__first2 != __last2)
              _M_transfer(__last1, __first2, __last2);
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-           this->_M_impl._M_size += __x.size();
-           __x._M_impl._M_size = 0;
-#endif
          }
       }
 
index e422de8..46a9443 100644 (file)
@@ -1,7 +1,7 @@
 // List implementation -*- C++ -*-
 
 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -313,27 +313,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       {
        __detail::_List_node_base _M_node;
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       size_t                    _M_size;
-#endif
-
        _List_impl()
        : _Node_alloc_type(), _M_node()
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       , _M_size(0)
-#endif
        { }
 
        _List_impl(const _Node_alloc_type& __a)
        : _Node_alloc_type(__a), _M_node()
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       , _M_size(0)
-#endif
        { }
 
 #ifdef __GXX_EXPERIMENTAL_CXX0X__
        _List_impl(_Node_alloc_type&& __a)
-       : _Node_alloc_type(std::move(__a)), _M_node(), _M_size(0)
+       : _Node_alloc_type(std::move(__a)), _M_node()
        { }
 #endif
       };
@@ -342,23 +332,12 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
       _List_node<_Tp>*
       _M_get_node()
-      {
-       _List_node<_Tp>* __tmp = _M_impl._Node_alloc_type::allocate(1);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       ++_M_impl._M_size;
-#endif 
-       return __tmp;
-      }
+      { return _M_impl._Node_alloc_type::allocate(1); }
 
       void
       _M_put_node(_List_node<_Tp>* __p)
-      {
-       _M_impl._Node_alloc_type::deallocate(__p, 1);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       --_M_impl._M_size;
-#endif
-      }
-      
+      { _M_impl._Node_alloc_type::deallocate(__p, 1); }
+
   public:
       typedef _Alloc allocator_type;
 
@@ -392,7 +371,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       {
        _M_init();
        __detail::_List_node_base::swap(_M_impl._M_node, __x._M_impl._M_node);
-       std::swap(_M_impl._M_size, __x._M_impl._M_size);
       }
 #endif
 
@@ -874,13 +852,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       /**  Returns the number of elements in the %list.  */
       size_type
       size() const _GLIBCXX_NOEXCEPT
-      {
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       return this->_M_impl._M_size;
-#else
-       return std::distance(begin(), end());
-#endif
-      }
+      { return std::distance(begin(), end()); }
 
       /**  Returns the size() of the largest possible %list.  */
       size_type
@@ -1215,9 +1187,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       {
        __detail::_List_node_base::swap(this->_M_impl._M_node, 
                                        __x._M_impl._M_node);
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-       std::swap(this->_M_impl._M_size, __x._M_impl._M_size);
-#endif
 
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
        // 431. Swapping containers with unequal allocators.
@@ -1262,11 +1231,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
            _M_check_equal_allocators(__x);
 
            this->_M_transfer(__position, __x.begin(), __x.end());
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-           this->_M_impl._M_size += __x.size();
-           __x._M_impl._M_size = 0;
-#endif
          }
       }
 
@@ -1298,14 +1262,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
          return;
 
        if (this != &__x)
-         {
-           _M_check_equal_allocators(__x);
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-           ++this->_M_impl._M_size;
-           --__x._M_impl._M_size;
-#endif
-         }
+         _M_check_equal_allocators(__x);
 
        this->_M_transfer(__position, __i, __j);
       }
@@ -1340,15 +1297,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
        if (__first != __last)
          {
            if (this != &__x)
-             {
-               _M_check_equal_allocators(__x);
-
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-               const size_type __size = std::distance(__first, __last);
-               this->_M_impl._M_size += __size;
-               __x._M_impl._M_size -= __size;
-#endif
-             }
+             _M_check_equal_allocators(__x);
 
            this->_M_transfer(__position, __first, __last);
          }
@@ -1624,10 +1573,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
     inline bool
     operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
     {
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
-      return (__x.size() == __y.size()
-             && std::equal(__x.begin(), __x.end(), __y.begin()));
-#else
       typedef typename list<_Tp, _Alloc>::const_iterator const_iterator;
       const_iterator __end1 = __x.end();
       const_iterator __end2 = __y.end();
@@ -1640,7 +1585,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
          ++__i2;
        }
       return __i1 == __end1 && __i2 == __end2;
-#endif
     }
 
   /**
index 42f28db..7bf99e1 100644 (file)
@@ -1,6 +1,6 @@
 // 2007-04-27  Paolo Carlini  <pcarlini@suse.de>
 
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1552 }
+// { dg-error "no matching" "" { target *-*-* } 1501 }
 
 #include <list>
 
index d4a4464..3d9dbb1 100644 (file)
@@ -1,6 +1,6 @@
 // 2007-04-27  Paolo Carlini  <pcarlini@suse.de>
 
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1508 }
+// { dg-error "no matching" "" { target *-*-* } 1457 }
 
 #include <list>
 
index fb32ee4..22cfe04 100644 (file)
@@ -1,6 +1,6 @@
 // 2007-04-27  Paolo Carlini  <pcarlini@suse.de>
 
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1508 }
+// { dg-error "no matching" "" { target *-*-* } 1457 }
 
 #include <list>
 #include <utility>
index d34be99..ff9d2fa 100644 (file)
@@ -1,6 +1,6 @@
 // 2007-04-27  Paolo Carlini  <pcarlini@suse.de>
 
-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation
+// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1508 }
+// { dg-error "no matching" "" { target *-*-* } 1457 }
 
 #include <list>