Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Aug 2014 20:37:04 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r269836 - in stable: 10/contrib/libc++/include 9/contrib/libc++/include
Message-ID:  <53e92970.2ae0.4534a0a4@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@bsdforen.de>
  PR:		192303

Modified:
  stable/10/contrib/libc++/include/list
Directory Properties:
  stable/10/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/9/contrib/libc++/include/list
Directory Properties:
  stable/9/contrib/libc++/   (props changed)

Modified: stable/10/contrib/libc++/include/list
==============================================================================
--- stable/10/contrib/libc++/include/list	Mon Aug 11 20:36:09 2014	(r269835)
+++ stable/10/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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53e92970.2ae0.4534a0a4>