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
This commit is contained in:
parent
cbcd1e4520
commit
91efdb828d
3 changed files with 64 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
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>
|
||||
|
||||
* include/parallel/find_selectors.h:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// 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.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -80,6 +80,22 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
|||
using std::allocator;
|
||||
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
|
||||
// convert to/from C-like strings to detect the end of the string.
|
||||
|
||||
|
@ -1941,11 +1957,11 @@ protected:
|
|||
this->_M_tree_ptr = _S_balance(this->_M_tree_ptr);
|
||||
_S_unref(__old);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -1959,8 +1975,8 @@ protected:
|
|||
{
|
||||
size_t __size = size();
|
||||
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);
|
||||
return __len;
|
||||
}
|
||||
|
|
36
libstdc++-v3/testsuite/ext/rope/36832.cc
Normal file
36
libstdc++-v3/testsuite/ext/rope/36832.cc
Normal file
|
@ -0,0 +1,36 @@
|
|||
// 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue