From 86d7e3739110aa3600895dd7454419c9f8476d5e Mon Sep 17 00:00:00 2001 From: paolo Date: Sun, 19 Oct 2008 14:49:38 +0000 Subject: [PATCH] 2008-10-19 Paolo Carlini * include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<> (_Args&&...)): Add in C++0x mode. (_Rb_tree<>::_M_create_node<>(_Args&&...)): Add in C++0x mode, use _M_get_Node_allocator. (_Rb_tree<>::_M_destroy_node(_Link_type): Use _M_get_Node_allocator in C++0x mode. * testsuite/23_containers/set/operators/1_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/map/operators/1_neg.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141226 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 12 ++++++ libstdc++-v3/include/bits/stl_tree.h | 48 ++++++++++++++++++---- .../testsuite/23_containers/map/operators/1_neg.cc | 6 +-- .../testsuite/23_containers/set/operators/1_neg.cc | 6 +-- 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index cbbc0efe652..10f226d04bc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2008-10-19 Paolo Carlini + + * include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<> + (_Args&&...)): Add in C++0x mode. + (_Rb_tree<>::_M_create_node<>(_Args&&...)): Add in C++0x mode, + use _M_get_Node_allocator. + (_Rb_tree<>::_M_destroy_node(_Link_type): Use _M_get_Node_allocator + in C++0x mode. + * testsuite/23_containers/set/operators/1_neg.cc: Adjust dg-error + line numbers. + * testsuite/23_containers/map/operators/1_neg.cc: Likewise. + 2008-10-18 Douglas Gregor * include/bits/stl_pair.h (__may_be_null_pointer_init): New. diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 73b75e46268..c80dbefc318 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -133,6 +133,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { typedef _Rb_tree_node<_Val>* _Link_type; _Val _M_value_field; + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template + _Rb_tree_node(_Args&&... __args) + : _Rb_tree_node_base(), + _M_value_field(std::forward<_Args>(__args)...) { } +#endif }; _Rb_tree_node_base* @@ -360,6 +367,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _M_put_node(_Link_type __p) { _M_impl._Node_allocator::deallocate(__p, 1); } +#ifndef __GXX_EXPERIMENTAL_CXX0X__ _Link_type _M_create_node(const value_type& __x) { @@ -374,6 +382,39 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __tmp; } + void + _M_destroy_node(_Link_type __p) + { + get_allocator().destroy(&__p->_M_value_field); + _M_put_node(__p); + } +#else + template + _Link_type + _M_create_node(_Args&&... __args) + { + _Link_type __tmp = _M_get_node(); + try + { + _M_get_Node_allocator().construct(__tmp, + std::forward<_Args>(__args)...); + } + catch(...) + { + _M_put_node(__tmp); + __throw_exception_again; + } + return __tmp; + } + + void + _M_destroy_node(_Link_type __p) + { + _M_get_Node_allocator().destroy(__p); + _M_put_node(__p); + } +#endif + _Link_type _M_clone_node(_Const_Link_type __x) { @@ -384,13 +425,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __tmp; } - void - _M_destroy_node(_Link_type __p) - { - get_allocator().destroy(&__p->_M_value_field); - _M_put_node(__p); - } - protected: template diff --git a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc index 7d66059b1fd..dd8888af3d2 100644 --- a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc @@ -1,6 +1,6 @@ // { dg-do compile } -// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -42,5 +42,5 @@ void test01() test &= itr == mapByName.end(); // { dg-error "no" } } -// { dg-error "candidates are" "" { target *-*-* } 210 } -// { dg-error "candidates are" "" { target *-*-* } 214 } +// { dg-error "candidates are" "" { target *-*-* } 217 } +// { dg-error "candidates are" "" { target *-*-* } 221 } diff --git a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc index a999e5b9697..5dfb45e98c9 100644 --- a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc @@ -1,6 +1,6 @@ // { dg-do compile } -// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -40,5 +40,5 @@ void test01() test &= itr == setByName.end(); // { dg-error "no" } } -// { dg-error "candidates are" "" { target *-*-* } 285 } -// { dg-error "candidates are" "" { target *-*-* } 289 } +// { dg-error "candidates are" "" { target *-*-* } 292 } +// { dg-error "candidates are" "" { target *-*-* } 296 } -- 2.11.0