svn commit: r269836 - in stable: 10/contrib/libc++/include 9/contrib/libc++/include
Dimitry Andric
dim at FreeBSD.org
Mon Aug 11 20:37:04 UTC 2014
Author: dim
Date: Mon Aug 11 20:37:03 2014
New Revision: 269836
URL: http://svnweb.freebsd.org/changeset/base/269836
Log:
MFC r269740:
Pull in r214736 from upstream libc++ trunk (by Marshall Clow):
Fix PR#20520 - predicate called too many times in list::remove_if.
Add tests for list, forward_list, and the std::remove_if algorithm
This fixes an issue where std::list<>::remove_if() and remove() could
erroneously visit elements twice.
Reported by: Dominic Fandrey <kamikaze at bsdforen.de>
PR: 192303
Modified:
stable/9/contrib/libc++/include/list
Directory Properties:
stable/9/contrib/libc++/ (props changed)
Changes in other areas also in this revision:
Modified:
stable/10/contrib/libc++/include/list
Directory Properties:
stable/10/ (props changed)
Modified: stable/9/contrib/libc++/include/list
==============================================================================
--- stable/9/contrib/libc++/include/list Mon Aug 11 20:36:09 2014 (r269835)
+++ stable/9/contrib/libc++/include/list Mon Aug 11 20:37:03 2014 (r269836)
@@ -2046,6 +2046,8 @@ list<_Tp, _Alloc>::remove(const value_ty
for (; __j != __e && *__j == __x; ++__j)
;
__i = erase(__i, __j);
+ if (__i != __e)
+ __i = _VSTD::next(__i);
}
else
++__i;
@@ -2065,6 +2067,8 @@ list<_Tp, _Alloc>::remove_if(_Pred __pre
for (; __j != __e && __pred(*__j); ++__j)
;
__i = erase(__i, __j);
+ if (__i != __e)
+ __i = _VSTD::next(__i);
}
else
++__i;
More information about the svn-src-stable-9
mailing list