Commit 687e00ee by Howard Hinnant Committed by Paolo Carlini

re PR libstdc++/17012 ([DR 526] std::list's function, remove, looks like it is…

re PR libstdc++/17012 ([DR 526] std::list's function, remove, looks like it is reading memory that has been freed.)

2007-02-08  Howard Hinnant  <hhinnant@apple.com>

	PR libstdc++/17012
	* include/bits/list.tcc (list<>::remove): Take care of
	&*__first == &__value.
	* docs/html/ext/howto.html: Add an entry for DR 526.

From-SVN: r121735
parent 67e1d0f7
2007-02-08 Howard Hinnant <hhinnant@apple.com>
PR libstdc++/17012
* include/bits/list.tcc (list<>::remove): Take care of
&*__first == &__value.
* docs/html/ext/howto.html: Add an entry for DR 526.
2007-02-07 Jakub Jelinek <jakub@redhat.com>
PR libgomp/28468
......
......@@ -586,6 +586,13 @@
<dd>Construct a <code>linear_congruential</code> engine and seed with it.
</dd>
<dt><a href="lwg-active.html#526">526</a>:
<em>Is it undefined if a function in the standard changes in
parameters?</em>
</dt>
<dd>Use &amp;value.
</dd>
<dt><a href="lwg-defects.html#538">538</a>:
<em>241 again: Does unique_copy() require CopyConstructible
and Assignable?</em>
......
// List implementation (out of line) -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
......@@ -176,14 +176,25 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD)
{
iterator __first = begin();
iterator __last = end();
iterator __extra = __last;
while (__first != __last)
{
iterator __next = __first;
++__next;
if (*__first == __value)
_M_erase(__first);
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 526. Is it undefined if a function in the standard changes
// in parameters?
if (&*__first != &__value)
_M_erase(__first);
else
__extra = __first;
}
__first = __next;
}
if (__extra != __last)
_M_erase(__extra);
}
template<typename _Tp, typename _Alloc>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment