+2004-04-21  Paolo Carlini  <pcarlini@suse.de>
+           Andrew Pinski  <pinskia@physics.uc.edu>
+
+       * include/bits/basic_string.tcc (_M_mutate): Don't compute
+       __src unnecessarily.
+
 2004-04-19  Benjamin Kosnik  <bkoz@redhat.com>
 
        * testsuite/27_io/basic_istream/extractors_character/char/9555-ic.cc: 
 
     {
       const size_type __old_size = this->size();
       const size_type __new_size = __old_size + __len2 - __len1;
-      const _CharT*        __src = _M_data()  + __pos + __len1;
       const size_type __how_much = __old_size - __pos - __len1;
 
       if (_M_rep() == &_S_empty_rep()
            traits_type::copy(__r->_M_refdata(), _M_data(), __pos);
          if (__how_much)
            traits_type::copy(__r->_M_refdata() + __pos + __len2,
-                             __src, __how_much);
+                             _M_data() + __pos + __len1, __how_much);
 
          _M_rep()->_M_dispose(__a);
          _M_data(__r->_M_refdata());
       else if (__how_much && __len1 != __len2)
        {
          // Work in-place
-         traits_type::move(_M_data() + __pos + __len2, __src, __how_much);
+         traits_type::move(_M_data() + __pos + __len2,
+                           _M_data() + __pos + __len1, __how_much);
        }
       _M_rep()->_M_set_sharable();
       _M_rep()->_M_length = __new_size;