Patchwork [v3] libstdc++/44963

login
register
mail settings
Submitter Paolo Carlini
Date Aug. 8, 2010, 2:59 p.m.
Message ID <4C5EC63D.9050209@oracle.com>
Download mbox | patch
Permalink /patch/61215/
State New
Headers show

Comments

Paolo Carlini - Aug. 8, 2010, 2:59 p.m.
Hi,

tested x86_64-linux, committed to mainline and 4_5-branch.

Paolo.

///////////////////////
2010-08-08  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/44963
	* include/bits/stl_iterator.h (insert_iterator<>::
	operator=(const typename _Container::value_type&,
	back_insert_iterator<>::
	operator=(const typename _Container::value_type&),
	front_insert_iterator<>::
	operator=(const typename _Container::value_type&))): Add
	in C++0x mode.
	* testsuite/ext/rope/44963.cc: New.
	* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust
	dg-error line number.

Patch

Index: include/bits/stl_iterator.h
===================================================================
--- include/bits/stl_iterator.h	(revision 162994)
+++ include/bits/stl_iterator.h	(working copy)
@@ -416,14 +416,21 @@ 
        *  the end, if you like).  Assigning a value to the %iterator will
        *  always append the value to the end of the container.
       */
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
       back_insert_iterator&
       operator=(typename _Container::const_reference __value)
       {
 	container->push_back(__value);
 	return *this;
       }
+#else
+      back_insert_iterator&
+      operator=(const typename _Container::value_type& __value)
+      {
+	container->push_back(__value);
+	return *this;
+      }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
       back_insert_iterator&
       operator=(typename _Container::value_type&& __value)
       {
@@ -499,14 +506,21 @@ 
        *  the front, if you like).  Assigning a value to the %iterator will
        *  always prepend the value to the front of the container.
       */
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
       front_insert_iterator&
       operator=(typename _Container::const_reference __value)
       {
 	container->push_front(__value);
 	return *this;
       }
+#else
+      front_insert_iterator&
+      operator=(const typename _Container::value_type& __value)
+      {
+	container->push_front(__value);
+	return *this;
+      }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
       front_insert_iterator&
       operator=(typename _Container::value_type&& __value)
       {
@@ -603,6 +617,7 @@ 
        *     // vector v contains A, 1, 2, 3, and Z
        *  @endcode
       */
+#ifndef __GXX_EXPERIMENTAL_CXX0X__
       insert_iterator&
       operator=(typename _Container::const_reference __value)
       {
@@ -610,8 +625,15 @@ 
 	++iter;
 	return *this;
       }
+#else
+      insert_iterator&
+      operator=(const typename _Container::value_type& __value)
+      {
+	iter = container->insert(iter, __value);
+	++iter;
+	return *this;
+      }
 
-#ifdef __GXX_EXPERIMENTAL_CXX0X__
       insert_iterator&
       operator=(typename _Container::value_type&& __value)
       {
Index: testsuite/ext/rope/44963.cc
===================================================================
--- testsuite/ext/rope/44963.cc	(revision 0)
+++ testsuite/ext/rope/44963.cc	(revision 0)
@@ -0,0 +1,31 @@ 
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2010 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
+// <http://www.gnu.org/licenses/>.
+
+#include <ext/rope>
+
+// libstdc++/44963
+void test01()
+{
+  __gnu_cxx::crope line("test");
+  auto ii(std::back_inserter(line));
+
+  *ii++ = 'm';
+  *ii++ = 'e';
+}
Index: testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
===================================================================
--- testsuite/20_util/weak_ptr/comparison/cmp_neg.cc	(revision 162994)
+++ testsuite/20_util/weak_ptr/comparison/cmp_neg.cc	(working copy)
@@ -45,7 +45,7 @@ 
 // { dg-warning "note" "" { target *-*-* } 423 }
 // { dg-warning "note" "" { target *-*-* } 862 }
 // { dg-warning "note" "" { target *-*-* } 510 }
-// { dg-warning "note" "" { target *-*-* } 1005 }
+// { dg-warning "note" "" { target *-*-* } 1027 }
 // { dg-warning "note" "" { target *-*-* } 340 }
 // { dg-warning "note" "" { target *-*-* } 290 }
 // { dg-warning "note" "" { target *-*-* } 197 }