From patchwork Mon Feb 7 20:17:06 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v3] libstdc++/47628 Date: Mon, 07 Feb 2011 10:17:06 -0000 From: Paolo Carlini X-Patchwork-Id: 82131 Message-Id: <4D505342.2070509@oracle.com> To: "gcc-patches@gcc.gnu.org" Cc: libstdc++ Hi, tested x86_64-linux, committed to mainline. Paolo. //////////////////////// 2011-02-07 Paolo Carlini PR libstdc++/47628 * include/bits/stl_tree.h (_Rb_tree::erase(iterator), erase(iterator, iterator)): Add back in C++03 mode. * testsuite/23_containers/map/modifiers/erase/47628.cc: New. * testsuite/23_containers/multimap/modifiers/erase/47628.cc: Likewise. Index: include/bits/stl_tree.h =================================================================== --- include/bits/stl_tree.h (revision 169795) +++ include/bits/stl_tree.h (working copy) @@ -1,7 +1,7 @@ // RB tree implementation -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, -// 2009, 2010 +// 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -762,6 +762,10 @@ } #else void + erase(iterator __position) + { _M_erase_aux(__position); } + + void erase(const_iterator __position) { _M_erase_aux(__position); } #endif @@ -779,6 +783,10 @@ } #else void + erase(iterator __first, iterator __last) + { _M_erase_aux(__first, __last); } + + void erase(const_iterator __first, const_iterator __last) { _M_erase_aux(__first, __last); } #endif Index: testsuite/23_containers/multimap/modifiers/erase/47628.cc =================================================================== --- testsuite/23_containers/multimap/modifiers/erase/47628.cc (revision 0) +++ testsuite/23_containers/multimap/modifiers/erase/47628.cc (revision 0) @@ -0,0 +1,45 @@ +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . +// + +// { dg-do compile } + +#include + +struct Key +{ + Key() { } + + Key(const Key&) { } + + template + Key(const T&) + { } + + bool operator<(const Key&) const; +}; + +typedef std::multimap MMap; + +// libstdc++/47628 +void f() +{ + MMap mm; + mm.insert(MMap::value_type()); + MMap::iterator i = mm.begin(); + mm.erase(i); +} Index: testsuite/23_containers/map/modifiers/erase/47628.cc =================================================================== --- testsuite/23_containers/map/modifiers/erase/47628.cc (revision 0) +++ testsuite/23_containers/map/modifiers/erase/47628.cc (revision 0) @@ -0,0 +1,45 @@ +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . +// + +// { dg-do compile } + +#include + +struct Key +{ + Key() { } + + Key(const Key&) { } + + template + Key(const T&) + { } + + bool operator<(const Key&) const; +}; + +typedef std::map Map; + +// libstdc++/47628 +void f() +{ + Map m; + m.insert(Map::value_type()); + Map::iterator i = m.begin(); + m.erase(i); +}