]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
stl_list.h (_List_base::_List_base(_List_base&&)): Optimize.
authorJonathan Wakely <jwakely@redhat.com>
Thu, 7 Aug 2014 17:25:13 +0000 (18:25 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 7 Aug 2014 17:25:13 +0000 (18:25 +0100)
* include/bits/stl_list.h (_List_base::_List_base(_List_base&&)):
Optimize.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust dg-error line number.
* testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Likewise.

From-SVN: r213716

libstdc++-v3/ChangeLog
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 15422ae971372e7b99a5923245a5a5292b329c98..6dfddd052f549147567aef1063e81f4d699c2732 100644 (file)
@@ -1,3 +1,16 @@
+2014-08-07  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/stl_list.h (_List_base::_List_base(_List_base&&)):
+       Optimize.
+       * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
+       Adjust dg-error line number.
+       * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc:
+       Likewise.
+       * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc:
+       Likewise.
+       * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
+       Likewise.
+
 2014-08-02  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/15339
index e014fbcd3ce887c05df8ddd81f10f8d2175b941c..dd9bba73bc141a3ca4f6525ce8708355d60d0358 100644 (file)
@@ -377,8 +377,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       _List_base(_List_base&& __x) noexcept
       : _M_impl(std::move(__x._M_get_Node_allocator()))
       {
-       _M_init();
-       __detail::_List_node_base::swap(_M_impl._M_node, __x._M_impl._M_node);
+       auto* const __xnode = std::__addressof(__x._M_impl._M_node);
+       if (__xnode->_M_next == __xnode)
+         _M_init();
+       else
+         {
+           auto* const __node = std::__addressof(_M_impl._M_node);
+           __node->_M_next = __xnode->_M_next;
+           __node->_M_prev = __xnode->_M_prev;
+           __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node;
+           __xnode->_M_next = __xnode->_M_prev = __xnode;
+         }
       }
 #endif
 
index 7c29a2d8c9be6f3fc5b64f423a1dcf6e239a2b27..885e753454616082db222d59371ce742a7291195 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1656 }
+// { dg-error "no matching" "" { target *-*-* } 1665 }
 
 #include <list>
 
index 382d985c1b05363b8232bd95265814f0f16dbf55..ccd9d1734bf90ff106ba2e2e8714d1c44929a501 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1608 }
+// { dg-error "no matching" "" { target *-*-* } 1617 }
 
 #include <list>
 
index 14585af98fa48312254ea4816a33829b266547e8..04966dc443a4f838f5954b09e16e1d646bc40270 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1608 }
+// { dg-error "no matching" "" { target *-*-* } 1617 }
 
 #include <list>
 #include <utility>
index a9f9f305f2714d2106b6200c11511b6dde353322..759dad6dba7802184584ccda1977c4f0194cf78c 100644 (file)
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1608 }
+// { dg-error "no matching" "" { target *-*-* } 1617 }
 
 #include <list>