Commit 91efdb82 by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/36832 (error compiling with crope)

2008-07-15  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/36832
	* include/ext/rope (_Destroy_const): Add.
	(rope<>::copy): Call it.
	* testsuite/ext/rope/36832.cc: New.

From-SVN: r137829
parent cbcd1e45
2008-07-15 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/36832
* include/ext/rope (_Destroy_const): Add.
(rope<>::copy): Call it.
* testsuite/ext/rope/36832.cc: New.
2008-07-15 Johannes Singler <singler@ira.uka.de> 2008-07-15 Johannes Singler <singler@ira.uka.de>
* include/parallel/find_selectors.h: * include/parallel/find_selectors.h:
......
// SGI's rope class -*- C++ -*- // SGI's rope class -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -80,6 +80,22 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) ...@@ -80,6 +80,22 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
using std::allocator; using std::allocator;
using std::_Destroy; using std::_Destroy;
// See libstdc++/36832.
template<typename _ForwardIterator, typename _Allocator>
void
_Destroy_const(_ForwardIterator __first,
_ForwardIterator __last, _Allocator __alloc)
{
for (; __first != __last; ++__first)
__alloc.destroy(&*__first);
}
template<typename _ForwardIterator, typename _Tp>
inline void
_Destroy_const(_ForwardIterator __first,
_ForwardIterator __last, allocator<_Tp>)
{ _Destroy(__first, __last); }
// The _S_eos function is used for those functions that // The _S_eos function is used for those functions that
// convert to/from C-like strings to detect the end of the string. // convert to/from C-like strings to detect the end of the string.
...@@ -1941,11 +1957,11 @@ protected: ...@@ -1941,11 +1957,11 @@ protected:
this->_M_tree_ptr = _S_balance(this->_M_tree_ptr); this->_M_tree_ptr = _S_balance(this->_M_tree_ptr);
_S_unref(__old); _S_unref(__old);
} }
void void
copy(_CharT* __buffer) const copy(_CharT* __buffer) const
{ {
_Destroy(__buffer, __buffer + size(), _M_get_allocator()); _Destroy_const(__buffer, __buffer + size(), _M_get_allocator());
_S_flatten(this->_M_tree_ptr, __buffer); _S_flatten(this->_M_tree_ptr, __buffer);
} }
...@@ -1959,8 +1975,8 @@ protected: ...@@ -1959,8 +1975,8 @@ protected:
{ {
size_t __size = size(); size_t __size = size();
size_t __len = (__pos + __n > __size? __size - __pos : __n); size_t __len = (__pos + __n > __size? __size - __pos : __n);
_Destroy(__buffer, __buffer + __len, _M_get_allocator()); _Destroy_const(__buffer, __buffer + __len, _M_get_allocator());
_S_flatten(this->_M_tree_ptr, __pos, __len, __buffer); _S_flatten(this->_M_tree_ptr, __pos, __len, __buffer);
return __len; return __len;
} }
......
// Copyright (C) 2008 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 2, 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 COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// rope (SGI extension)
#include <ext/rope>
// libstdc++/36832
void test01()
{
__gnu_cxx::crope myRope;
myRope = "1234567890";
char buffer[100];
myRope.copy(1, 1, buffer);
}
int main()
{
test01();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment