2005-02-26 Earl Chew <earl_chew@agilent.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 26 Feb 2005 23:34:36 +0000 (23:34 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 26 Feb 2005 23:34:36 +0000 (23:34 +0000)
    Christopher Jefferson  <chris@bubblescope.net>

* include/bits/stl_tree.h (_Rb_tree<>::_M_insert): Don't leak
memory if _M_key_compare throws.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95597 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_tree.h

index 3982be6..441bb58 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-26  Earl Chew  <earl_chew@agilent.com>
+           Christopher Jefferson  <chris@bubblescope.net>
+
+       * include/bits/stl_tree.h (_Rb_tree<>::_M_insert): Don't leak
+       memory if _M_key_compare throws.
+
 2005-02-25  Paolo Carlini  <pcarlini@suse.de>
 
        * include/tr1/type_traits: Add the trivial is_union and is_class;
index 4da42c1..c514563 100644 (file)
@@ -786,12 +786,11 @@ namespace std
     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
     _M_insert(_Base_ptr __x, _Base_ptr __p, const _Val& __v)
     {
-      _Link_type __z = _M_create_node(__v);
-      bool __insert_left;
+      bool __insert_left = (__x != 0 || __p == _M_end()
+                           || _M_impl._M_key_compare(_KeyOfValue()(__v), 
+                                                     _S_key(__p)));
 
-      __insert_left = (__x != 0 || __p == _M_end()
-                      || _M_impl._M_key_compare(_KeyOfValue()(__v), 
-                                                _S_key(__p)));
+      _Link_type __z = _M_create_node(__v);
 
       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,  
                                    this->_M_impl._M_header);