]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR libstdc++/61946 (rope construction, passing allocator referenct witho...
authorJonathan Wakely <jwakely@redhat.com>
Mon, 4 Aug 2014 22:16:44 +0000 (23:16 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 4 Aug 2014 22:16:44 +0000 (23:16 +0100)
Backported from mainline
2014-07-29  Jonathan Wakely  <jwakely@redhat.com>

PR libstdc++/61946
* include/ext/rope (rope::rope(char_producer<_CharT>*, size_t, bool,
const allocator_type&)): Pass non-const allocator to
_S_new_RopeFunction.
* testsuite/ext/rope/61946.cc: New.

From-SVN: r213611

libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/rope
libstdc++-v3/testsuite/ext/rope/61946.cc [new file with mode: 0644]

index ed7e39cb871cb7a35f55db9b20d25a02ccc0487f..9c8408d8d09394447444f615e0536ad74b1a55a3 100644 (file)
@@ -1,3 +1,14 @@
+2014-08-04  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backported from mainline
+       2014-07-29  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/61946
+       * include/ext/rope (rope::rope(char_producer<_CharT>*, size_t, bool,
+       const allocator_type&)): Pass non-const allocator to
+       _S_new_RopeFunction.
+       * testsuite/ext/rope/61946.cc: New.
+
 2014-08-04  Zifei Tong  <zifeitong@gmail.com>
 
        * libsupc++/atexit_thread.cc (HAVE___CXA_THREAD_ATEXIT_IMPL): Add
index 38eb1e83a3dd7262157b5110bb9e134836853001..75c8fc2cb2049b8271d5b9b5f4e3670825ad8db8 100644 (file)
@@ -1544,7 +1544,7 @@ protected:
       typedef typename _Base::allocator_type allocator_type;
       using _Base::_M_tree_ptr;
       using _Base::get_allocator;
-      using _Base::_M_get_allocator;      
+      using _Base::_M_get_allocator;
       typedef __GC_CONST _CharT* _Cstrptr;
       
       static _CharT _S_empty_c_str[1];
@@ -1876,8 +1876,9 @@ protected:
           const allocator_type& __a = allocator_type())
       : _Base(__a)
       {
-       this->_M_tree_ptr = (0 == __len) ?
-         0 : _S_new_RopeFunction(__fn, __len, __delete_fn, __a);
+       this->_M_tree_ptr = (0 == __len)
+         ? 0
+         : _S_new_RopeFunction(__fn, __len, __delete_fn, _M_get_allocator());
       }
 
       rope(const rope& __x, const allocator_type& __a = allocator_type())
diff --git a/libstdc++-v3/testsuite/ext/rope/61946.cc b/libstdc++-v3/testsuite/ext/rope/61946.cc
new file mode 100644 (file)
index 0000000..ba73b48
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright (C) 2014 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 3, 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 COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-do compile }
+
+#include <ext/rope>
+
+struct empty_char_prod : __gnu_cxx::char_producer<char>
+{
+  virtual void operator()(size_t, size_t, char*) {}
+};
+
+int main ()
+{
+  empty_char_prod* ecp = new empty_char_prod;
+  __gnu_cxx::crope excrope( ecp, 10L, true );
+}