]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR libstdc++/78389 fix backwards size adjustments
authorVille Voutilainen <ville.voutilainen@gmail.com>
Mon, 16 Jan 2017 13:32:39 +0000 (15:32 +0200)
committerVille Voutilainen <ville@gcc.gnu.org>
Mon, 16 Jan 2017 13:32:39 +0000 (15:32 +0200)
Backport from mainline
2017-01-16  Ville Voutilainen  <ville.voutilainen@gmail.com>

PR libstdc++/78389
* include/bits/list.tcc (merge(list&&)): Fix backwards size adjustments.
(merge(list&&, _StrictWeakOrdering)): Likewise.
* testsuite/23_containers/list/operations/78389.cc: Add
better test for the sizes.

From-SVN: r244493

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/list.tcc
libstdc++-v3/testsuite/23_containers/list/operations/78389.cc

index 2a3c4d53c8e4e6d4722ad5af3c6897c9349f46dc..18b1ea6a3a06d648696fa45964c36968ccb06794 100644 (file)
@@ -1,3 +1,14 @@
+2017-01-16  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       Backport from mainline
+       2017-01-16  Ville Voutilainen  <ville.voutilainen@gmail.com>
+
+       PR libstdc++/78389
+       * include/bits/list.tcc (merge(list&&)): Fix backwards size adjustments.
+       (merge(list&&, _StrictWeakOrdering)): Likewise.
+       * testsuite/23_containers/list/operations/78389.cc: Add
+       better test for the sizes.
+
 2017-01-15  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        Backport from mainline
index 22a5530aa5d65d2de204e976d2485fa456220744..b812b19d6d4ac58d0f33dfa59b17b087be740511 100644 (file)
@@ -364,8 +364,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
          __catch(...)
            {
              size_t __dist = distance(__first2, __last2);
-             this->_M_inc_size(__dist);
-             __x._M_set_size(__orig_size - __dist);
+             this->_M_inc_size(__orig_size - __dist);
+             __x._M_set_size(__dist);
              __throw_exception_again;
            }
        }
@@ -412,8 +412,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
            __catch(...)
              {
                size_t __dist = distance(__first2, __last2);
-               this->_M_inc_size(__dist);
-               __x._M_set_size(__orig_size - __dist);
+               this->_M_inc_size(__orig_size - __dist);
+               __x._M_set_size(__dist);
                __throw_exception_again;
              }
          }
index 3149a1f8c62a586ff1224b94fd0ab5e7f9ac12d0..8e3904123f1de5e9becb114d0c49e561986a6f24 100644 (file)
@@ -57,15 +57,18 @@ int main()
     std::list<int> a{1, 2, 3, 4};
     std::list<int> b{5, 6, 7, 8, 9, 10, 11, 12};
     try {
-      a.merge(b, ThrowingComparator{5, 0});
+      a.merge(b, ThrowingComparator{4, 0});
     } catch (...) {
     }
-    VERIFY(a.size() == 8 && b.size() == 4);
+    VERIFY(a.size() == std::distance(a.begin(), a.end()) &&
+          b.size() == std::distance(b.begin(), b.end()));
     std::list<X> ax{1, 2, 3, 4};
     std::list<X> bx{5, 6, 7, 8, 9, 10, 11, 12};
-    throw_after_X = 5;
+    throw_after_X = 4;
     try {
         ax.merge(bx);
     } catch (...) {
     }
+    VERIFY(ax.size() == std::distance(ax.begin(), ax.end()) &&
+          bx.size() == std::distance(bx.begin(), bx.end()));
 }