From patchwork Mon Feb 7 20:17:06 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 82131 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id D68DDB70E3 for ; Tue, 8 Feb 2011 07:17:19 +1100 (EST) Received: (qmail 19662 invoked by alias); 7 Feb 2011 20:17:17 -0000 Received: (qmail 19643 invoked by uid 22791); 7 Feb 2011 20:17:14 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from vsmtp12.tin.it (HELO vsmtp12.tin.it) (212.216.176.206) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 07 Feb 2011 20:17:09 +0000 Received: from [192.168.0.4] (79.36.30.107) by vsmtp12.tin.it (8.5.132) id 4CFDF73004C922C0; Mon, 7 Feb 2011 21:17:07 +0100 Message-ID: <4D505342.2070509@oracle.com> Date: Mon, 07 Feb 2011 21:17:06 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20101125 SUSE/3.0.11 Thunderbird/3.0.11 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: libstdc++ Subject: [v3] libstdc++/47628 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org 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); +}