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
This commit is contained in:
parent
67e1d0f75c
commit
687e00ee8a
3 changed files with 27 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
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 &value.
|
||||
</dd>
|
||||
|
||||
<dt><a href="lwg-defects.html#538">538</a>:
|
||||
<em>241 again: Does unique_copy() require CopyConstructible
|
||||
and Assignable?</em>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 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>
|
||||
|
|
Loading…
Add table
Reference in a new issue