Index: include/bits/list.tcc
===================================================================
--- include/bits/list.tcc (revision 155172)
+++ include/bits/list.tcc (working copy)
@@ -312,13 +312,13 @@
do
{
- __carry.splice(__carry.begin(), *this, begin());
+ __carry.splice(__carry.begin(), _GLIBCXX_MOVE(*this), begin());
for(__counter = &__tmp[0];
__counter != __fill && !__counter->empty();
++__counter)
{
- __counter->merge(__carry);
+ __counter->merge(_GLIBCXX_MOVE(__carry));
__carry.swap(*__counter);
}
__carry.swap(*__counter);
@@ -328,7 +328,7 @@
while ( !empty() );
for (__counter = &__tmp[1]; __counter != __fill; ++__counter)
- __counter->merge(*(__counter - 1));
+ __counter->merge(_GLIBCXX_MOVE(*(__counter - 1)));
swap( *(__fill - 1) );
}
}
@@ -389,13 +389,13 @@
do
{
- __carry.splice(__carry.begin(), *this, begin());
+ __carry.splice(__carry.begin(), _GLIBCXX_MOVE(*this), begin());
for(__counter = &__tmp[0];
__counter != __fill && !__counter->empty();
++__counter)
{
- __counter->merge(__carry, __comp);
+ __counter->merge(_GLIBCXX_MOVE(__carry), __comp);
__carry.swap(*__counter);
}
__carry.swap(*__counter);
@@ -405,7 +405,7 @@
while ( !empty() );
for (__counter = &__tmp[1]; __counter != __fill; ++__counter)
- __counter->merge(*(__counter - 1), __comp);
+ __counter->merge(_GLIBCXX_MOVE(*(__counter - 1)), __comp);
swap(*(__fill - 1));
}
}
Index: testsuite/23_containers/list/operations/42352.cc
===================================================================
--- testsuite/23_containers/list/operations/42352.cc (revision 0)
+++ testsuite/23_containers/list/operations/42352.cc (revision 0)
@@ -0,0 +1,66 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2009 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// .
+
+#include
+#include
+
+// PR libstdc++/42352
+void test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::list l{3, 2, 4, 1, 5, 9, 0, 8, 6, 7};
+
+ l.sort();
+
+ for (auto it = l.begin(); it != l.end(); ++it)
+ {
+ static int nn = 0;
+ VERIFY( *it == nn++ );
+ }
+}
+
+void test02()
+{
+ bool test __attribute__((unused)) = true;
+
+ std::list l{3, 2, 4, 1, 5, 9, 0, 8, 6, 7};
+
+ struct compare
+ {
+ bool
+ operator()(int const& one, int const& two) const
+ { return one > two; }
+ };
+
+ l.sort(compare());
+
+ for (auto it = l.begin(); it != l.end(); ++it)
+ {
+ static int nn = 9;
+ VERIFY( *it == nn-- );
+ }
+}
+
+int main()
+{
+ test01();
+ test02();
+ return 0;
+}