diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 082c33a512c..e21b855066b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2017-06-16 Jonathan Wakely + * 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. diff --git a/libstdc++-v3/include/bits/locale_conv.h b/libstdc++-v3/include/bits/locale_conv.h index 74beaec5ae6..47c8dee53cb 100644 --- a/libstdc++-v3/include/bits/locale_conv.h +++ b/libstdc++-v3/include/bits/locale_conv.h @@ -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) diff --git a/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc b/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc new file mode 100644 index 00000000000..8eda714b61d --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc @@ -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 +// . + +// { dg-do run { target c++11 } } + +#include +#include +#include + +void +test01() +{ + struct Cvt : std::codecvt { }; + std::stringstream ss; + std::wbuffer_convert cvt(ss.rdbuf()); + auto p = ss.std::ios::rdbuf(&cvt); + ss << "hello"; + VERIFY( ss.flush().good() ); + ss.std::ios::rdbuf(p); +} + +int main() +{ + test01(); +}