Fix std::wbuffer_convert::sync()

* include/bits/locale_conv.h (wbuffer_convert::sync): Fix condition.
	* testsuite/22_locale/conversions/buffer/2.cc: New.

From-SVN: r249256
This commit is contained in:
Jonathan Wakely 2017-06-16 14:35:22 +01:00 committed by Jonathan Wakely
parent 38a5f81782
commit d8be51c85f
3 changed files with 43 additions and 1 deletions

View File

@ -1,5 +1,8 @@
2017-06-16 Jonathan Wakely <jwakely@redhat.com>
* include/bits/locale_conv.h (wbuffer_convert::sync): Fix condition.
* testsuite/22_locale/conversions/buffer/2.cc: New.
* doc/xml/manual/appendix_contributing.xml: Link to the list of bad
names, and link to the test docs and note higher DejaGnu version
requirement.

View File

@ -375,7 +375,7 @@ _GLIBCXX_END_NAMESPACE_CXX11
protected:
int
sync()
{ return _M_buf && _M_conv_put() && _M_buf->pubsync() ? 0 : -1; }
{ return _M_buf && _M_conv_put() && !_M_buf->pubsync() ? 0 : -1; }
typename _Wide_streambuf::int_type
overflow(typename _Wide_streambuf::int_type __out)

View File

@ -0,0 +1,39 @@
// Copyright (C) 2017 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 run { target c++11 } }
#include <locale>
#include <sstream>
#include <testsuite_hooks.h>
void
test01()
{
struct Cvt : std::codecvt<char, char, std::mbstate_t> { };
std::stringstream ss;
std::wbuffer_convert<Cvt, char> cvt(ss.rdbuf());
auto p = ss.std::ios::rdbuf(&cvt);
ss << "hello";
VERIFY( ss.flush().good() );
ss.std::ios::rdbuf(p);
}
int main()
{
test01();
}