From 3fa625272b07f02d0854d5e497e78d2d1b137ad4 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 16 Jun 2017 15:22:30 +0100 Subject: [PATCH] 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: r249259 --- libstdc++-v3/ChangeLog | 3 ++ libstdc++-v3/include/bits/locale_conv.h | 2 +- .../22_locale/conversions/buffer/2.cc | 39 +++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/22_locale/conversions/buffer/2.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 81cd79a69c11..8ab39d7eb531 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 7032d4f404a6..77f1adc03aea 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 000000000000..8eda714b61dc --- /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(); +} -- 2.47.2