From bfe8a528aa35b66146fa7bac8ea0c1a5bc48bb70 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 16 Jun 2017 14:23:42 +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: r249255 --- 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 bcf1d049a29..f04fc0aef26 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. + PR libstdc++/81092 * acinclude.m4: Bump libtool_VERSION. * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update. 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(); +} -- 2.30.2