From: Ville Voutilainen Date: Mon, 16 Jan 2017 13:32:39 +0000 (+0200) Subject: PR libstdc++/78389 fix backwards size adjustments X-Git-Tag: releases/gcc-5.5.0~583 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7aef452718d875b5b1f7fc30fe18c8e704433bef;p=thirdparty%2Fgcc.git PR libstdc++/78389 fix backwards size adjustments Backport from mainline 2017-01-16 Ville Voutilainen 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 2a3c4d53c8e4..18b1ea6a3a06 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2017-01-16 Ville Voutilainen + + Backport from mainline + 2017-01-16 Ville Voutilainen + + 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 Backport from mainline diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc index 22a5530aa5d6..b812b19d6d4a 100644 --- a/libstdc++-v3/include/bits/list.tcc +++ b/libstdc++-v3/include/bits/list.tcc @@ -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; } } diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc b/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc index 3149a1f8c62a..8e3904123f1d 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/78389.cc @@ -57,15 +57,18 @@ int main() std::list a{1, 2, 3, 4}; std::list 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 ax{1, 2, 3, 4}; std::list 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())); }