]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/61946 (rope construction, passing allocator referenct without const)
authorJonathan Wakely <jwakely@redhat.com>
Tue, 29 Jul 2014 17:30:25 +0000 (18:30 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 29 Jul 2014 17:30:25 +0000 (18:30 +0100)
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: r213220

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

index 4a7ee072d25d5397f10979f81b1b2a64e6eefb3c..42cfa7bcf528fe5844488f785db027e972a5f624 100644 (file)
@@ -1,3 +1,11 @@
+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-07-29  Ed Smith-Rowland  <3dw4rd@verizon.net>
 
        PR libstdc++/60037 - SIGFPE in std::generate_canonical<unsigned int...>
index df3d4bb317918af567db2555989aa6b01a675349..147b335a8b845e26a7995b889603a402662af89c 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 );
+}