PR libstdc++/42261 (take 2)

2009-12-10  Paolo Carlini  <paolo.carlini@oracle.com>

	PR libstdc++/42261 (take 2)
	* include/bits/basic_string.h (_S_construct_aux_2(size_type, _CharT,
	const _Alloc&)): Add.
	(_S_construct_aux(_Integer, _Integer, const _Alloc&, __true_type)):
	Call it.
	* include/ext/sso_string_base.h (_M_construct_aux_2(size_type,
	_CharT): Add.
	(_M_construct_aux(_Integer, _Integer, std::__true_type)): Call it.
	* include/ext/rc_string_base.h (_S_construct_aux_2(size_type, _CharT,
	const _Alloc&)): Add.
	(_S_construct_aux(_Integer, _Integer, const _Alloc&, __true_type)):
	Call it.
	* config/abi/pre/gnu.ver: Export basic_string::_S_construct_aux_2.
	* testsuite/21_strings/basic_string/cons/char/42261.cc: New.
	* testsuite/21_strings/basic_string/cons/wchar_t/42261.cc: Likewise.

From-SVN: r155137
This commit is contained in:
Paolo Carlini 2009-12-10 19:17:27 +00:00 committed by Paolo Carlini
parent d435810e76
commit df4d18ad80
7 changed files with 108 additions and 4 deletions

View File

@ -1,3 +1,21 @@
2009-12-10 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/42261 (take 2)
* include/bits/basic_string.h (_S_construct_aux_2(size_type, _CharT,
const _Alloc&)): Add.
(_S_construct_aux(_Integer, _Integer, const _Alloc&, __true_type)):
Call it.
* include/ext/sso_string_base.h (_M_construct_aux_2(size_type,
_CharT): Add.
(_M_construct_aux(_Integer, _Integer, std::__true_type)): Call it.
* include/ext/rc_string_base.h (_S_construct_aux_2(size_type, _CharT,
const _Alloc&)): Add.
(_S_construct_aux(_Integer, _Integer, const _Alloc&, __true_type)):
Call it.
* config/abi/pre/gnu.ver: Export basic_string::_S_construct_aux_2.
* testsuite/21_strings/basic_string/cons/char/42261.cc: New.
* testsuite/21_strings/basic_string/cons/wchar_t/42261.cc: Likewise.
2009-12-10 Paolo Carlini <paolo.carlini@oracle.com>
Revert:

View File

@ -1039,9 +1039,11 @@ GLIBCXX_3.4.14 {
_ZNKSbIwSt11char_traitsIwESaIwEE7crbeginEv;
_ZNKSbIwSt11char_traitsIwESaIwEE5crendEv;
# string|wstring ::_S_construct<> helpers
# string|wstring ::_S_construct<> and ::_S_construct_aux_2 helpers
_ZNSs12_S_constructI*;
_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructI*;
_ZNSs18_S_construct_aux_2*;
_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2*;
} GLIBCXX_3.4.13;

View File

@ -1588,7 +1588,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
static _CharT*
_S_construct_aux(_Integer __beg, _Integer __end,
const _Alloc& __a, __true_type)
{ return _S_construct(static_cast<size_type>(__beg), __end, __a); }
{ return _S_construct_aux_2(static_cast<size_type>(__beg),
__end, __a); }
static _CharT*
_S_construct_aux_2(size_type __req, _CharT __c, const _Alloc& __a)
{ return _S_construct(__req, __c, __a); }
template<class _InIterator>
static _CharT*

View File

@ -231,7 +231,12 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
static _CharT*
_S_construct_aux(_Integer __beg, _Integer __end,
const _Alloc& __a, std::__true_type)
{ return _S_construct(static_cast<size_type>(__beg), __end, __a); }
{ return _S_construct_aux_2(static_cast<size_type>(__beg),
__end, __a); }
static _CharT*
_S_construct_aux_2(size_type __req, _CharT __c, const _Alloc& __a)
{ return _S_construct(__req, __c, __a); }
template<typename _InIterator>
static _CharT*

View File

@ -106,7 +106,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
template<typename _Integer>
void
_M_construct_aux(_Integer __beg, _Integer __end, std::__true_type)
{ _M_construct(static_cast<size_type>(__beg), __end); }
{ _M_construct_aux_2(static_cast<size_type>(__beg), __end); }
void
_M_construct_aux_2(size_type __req, _CharT __c)
{ _M_construct(__req, __c); }
template<typename _InIterator>
void

View File

@ -0,0 +1,35 @@
// Copyright (C) 2009 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/>.
#include <string>
#include <testsuite_hooks.h>
// libstdc++/42261
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
const string s(string::size_type(6), string::size_type('f'));
VERIFY( s == "ffffff" );
}
int main()
{
test01();
return 0;
}

View File

@ -0,0 +1,35 @@
// Copyright (C) 2009 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/>.
#include <string>
#include <testsuite_hooks.h>
// libstdc++/42261
void test01()
{
bool test __attribute__((unused)) = true;
using namespace std;
const wstring s(wstring::size_type(6), wstring::size_type(L'f'));
VERIFY( s == L"ffffff" );
}
int main()
{
test01();
return 0;
}