From 6280bdbee37a281ba155bc7f457a6c2cd97fd61b Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sat, 3 Jan 2009 22:32:08 +0000 Subject: [PATCH] 2009-01-03 Paolo Carlini * Revert last commit, reopen and suspend libstdc++/38678. From-SVN: r143038 --- libstdc++-v3/ChangeLog | 4 ++ libstdc++-v3/include/bits/istream.tcc | 22 +----- libstdc++-v3/include/bits/ostream.tcc | 17 +---- libstdc++-v3/include/std/istream | 19 +----- libstdc++-v3/include/std/ostream | 36 +++------- .../27_io/basic_istream/read/char/38678.cc | 67 ------------------- .../27_io/basic_istream/read/wchar_t/38678.cc | 67 ------------------- .../27_io/basic_ostream/write/char/38678.cc | 63 ----------------- .../basic_ostream/write/wchar_t/38678.cc | 63 ----------------- 9 files changed, 19 insertions(+), 339 deletions(-) delete mode 100644 libstdc++-v3/testsuite/27_io/basic_istream/read/char/38678.cc delete mode 100644 libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/38678.cc delete mode 100644 libstdc++-v3/testsuite/27_io/basic_ostream/write/char/38678.cc delete mode 100644 libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/38678.cc diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bd579a0ded3..b90886e473b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2009-01-03 Paolo Carlini + + * Revert last commit, reopen and suspend libstdc++/38678. + 2009-01-01 Paolo Carlini PR libstdc++/38678 diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 39180442d90..440d234023e 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -1,7 +1,7 @@ // istream classes -*- C++ -*- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009 +// 2006, 2007 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -599,22 +599,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __c; } - template - streamsize - basic_istream<_CharT, _Traits>:: - _M_read(char_type* __s, streamsize __n) - { - streamsize __ret = 0; - for (; __ret < __n; ++__ret, ++__s) - { - const int_type __c = this->rdbuf()->sbumpc(); - if (traits_type::eq_int_type(__c, traits_type::eof())) - break; - traits_type::assign(*__s, traits_type::to_char_type(__c)); - } - return __ret; - } - template basic_istream<_CharT, _Traits>& basic_istream<_CharT, _Traits>:: @@ -627,7 +611,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ios_base::iostate __err = ios_base::iostate(ios_base::goodbit); try { - _M_gcount = _M_read(__s, __n); + _M_gcount = this->rdbuf()->sgetn(__s, __n); if (_M_gcount != __n) __err |= (ios_base::eofbit | ios_base::failbit); } @@ -659,7 +643,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Cannot compare int_type with streamsize generically. const streamsize __num = this->rdbuf()->in_avail(); if (__num > 0) - _M_gcount = _M_read(__s, std::min(__num, __n)); + _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n)); else if (__num == -1) __err |= ios_base::eofbit; } diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc index 57bc5aa9d57..06facc0360b 100644 --- a/libstdc++-v3/include/bits/ostream.tcc +++ b/libstdc++-v3/include/bits/ostream.tcc @@ -1,7 +1,7 @@ // ostream classes -*- C++ -*- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009 +// 2006, 2007 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -182,21 +182,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return *this; } - template - streamsize - basic_ostream<_CharT, _Traits>:: - _M_write_(const char_type* __s, streamsize __n) - { - streamsize __ret = 0; - for (; __ret < __n; ++__ret, ++__s) - { - const int_type __c = this->rdbuf()->sputc(*__s); - if (traits_type::eq_int_type(__c, traits_type::eof())) - break; - } - return __ret; - } - template basic_ostream<_CharT, _Traits>& basic_ostream<_CharT, _Traits>:: diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream index f88b2f2c07c..8b87c73fc1b 100644 --- a/libstdc++-v3/include/std/istream +++ b/libstdc++-v3/include/std/istream @@ -1,7 +1,7 @@ // Input streams -*- C++ -*- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009 +// 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -586,28 +586,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) : _M_gcount(streamsize(0)) { this->init(0); } - streamsize - _M_read(char_type* __s, streamsize __n); - template __istream_type& _M_extract(_ValueT& __v); }; - template<> - inline streamsize - basic_istream:: - _M_read(char_type* __s, streamsize __n) - { return this->rdbuf()->__streambuf_type::xsgetn(__s, __n); } - -#ifdef _GLIBCXX_USE_WCHAR_T - template<> - inline streamsize - basic_istream:: - _M_read(char_type* __s, streamsize __n) - { return this->rdbuf()->__streambuf_type::xsgetn(__s, __n); } -#endif - // Explicit specialization declarations, defined in src/istream.cc. template<> basic_istream& diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream index f6fad8f0793..93a7d6ede31 100644 --- a/libstdc++-v3/include/std/ostream +++ b/libstdc++-v3/include/std/ostream @@ -1,7 +1,7 @@ // Output streams -*- C++ -*- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2008, 2009 +// 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -286,6 +286,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __ostream_type& put(char_type __c); + // Core write functionality, without sentry. + void + _M_write(const char_type* __s, streamsize __n) + { + const streamsize __put = this->rdbuf()->sputn(__s, __n); + if (__put != __n) + this->setstate(ios_base::badbit); + } + /** * @brief Character string insertion. * @param s The array to insert. @@ -356,36 +365,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) basic_ostream() { this->init(0); } - void - _M_write(const char_type* __s, streamsize __n) - { - const streamsize __put = _M_write_(__s, __n); - if (__put != __n) - this->setstate(ios_base::badbit); - } - - streamsize - _M_write_(const char_type* __s, streamsize __n); - template __ostream_type& _M_insert(_ValueT __v); }; - template<> - inline streamsize - basic_ostream:: - _M_write_(const char_type* __s, streamsize __n) - { return this->rdbuf()->__streambuf_type::xsputn(__s, __n); } - -#ifdef _GLIBCXX_USE_WCHAR_T - template<> - inline streamsize - basic_ostream:: - _M_write_(const char_type* __s, streamsize __n) - { return this->rdbuf()->__streambuf_type::xsputn(__s, __n); } -#endif - /** * @brief Performs setup work for output streams. * diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/read/char/38678.cc b/libstdc++-v3/testsuite/27_io/basic_istream/read/char/38678.cc deleted file mode 100644 index e4865af5c6c..00000000000 --- a/libstdc++-v3/testsuite/27_io/basic_istream/read/char/38678.cc +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2009 Free Software Foundation -// -// 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 2, 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 COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// 27.6.1.3 unformatted input functions - -#include -#include -#include - -// libstdc++/38678 -void test01() -{ - bool test __attribute__((unused)) = true; - - static char x = '0'; - - struct : std::streambuf - { - char c; - - int_type - underflow() - { - c = x++; - setg(&c, &c, &c + 1); - return traits_type::to_int_type(c); - } - - std::streamsize - xsgetn(char*, std::streamsize) - { - VERIFY( !"xsgetn should not be called" ); - return 0; - } - } sb; - - std::istream in(&sb); - - char s[4] = ""; - - in.read(s, 4); - - VERIFY( in.good() ); - VERIFY( 4 == in.gcount() ); - VERIFY( '0' == s[0] && '1' == s[1] && '2' == s[2] && '3' == s[3] ); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/38678.cc b/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/38678.cc deleted file mode 100644 index fcf1b88ce9d..00000000000 --- a/libstdc++-v3/testsuite/27_io/basic_istream/read/wchar_t/38678.cc +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (C) 2009 Free Software Foundation -// -// 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 2, 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 COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// 27.6.1.3 unformatted input functions - -#include -#include -#include - -// libstdc++/38678 -void test01() -{ - bool test __attribute__((unused)) = true; - - static wchar_t x = L'0'; - - struct : std::wstreambuf - { - wchar_t c; - - int_type - underflow() - { - c = x++; - setg(&c, &c, &c + 1); - return traits_type::to_int_type(c); - } - - std::streamsize - xsgetn(wchar_t*, std::streamsize) - { - VERIFY( !"xsgetn should not be called" ); - return 0; - } - } sb; - - std::wistream in(&sb); - - wchar_t s[4] = L""; - - in.read(s, 4); - - VERIFY( in.good() ); - VERIFY( 4 == in.gcount() ); - VERIFY( L'0' == s[0] && L'1' == s[1] && L'2' == s[2] && L'3' == s[3] ); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/write/char/38678.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/write/char/38678.cc deleted file mode 100644 index 6c7fee1b135..00000000000 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/write/char/38678.cc +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2009 Free Software Foundation -// -// 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 2, 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 COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// 27.6.2.6 unformatted output functions - -#include -#include -#include - -// libstdc++/38678 -void test01() -{ - bool test __attribute__((unused)) = true; - - static char s[4] = ""; - static unsigned i = 0; - - struct : std::streambuf - { - int_type - overflow(int_type c) - { - s[i++] = traits_type::to_char_type(c); - return traits_type::not_eof(c); - } - - std::streamsize - xsputn(const char*, std::streamsize) - { - VERIFY( !"xsputn should not be called" ); - return 0; - } - } sb; - - std::ostream out(&sb); - - out.write("0123", 4); - - VERIFY( out.good() ); - VERIFY( 4 == i ); - VERIFY( '0' == s[0] && '1' == s[1] && '2' == s[2] && '3' == s[3] ); -} - -int main() -{ - test01(); - return 0; -} diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/38678.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/38678.cc deleted file mode 100644 index 8a9d184eabd..00000000000 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/write/wchar_t/38678.cc +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) 2009 Free Software Foundation -// -// 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 2, 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 COPYING. If not, write to the Free -// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -// USA. - -// 27.6.2.6 unformatted output functions - -#include -#include -#include - -// libstdc++/38678 -void test01() -{ - bool test __attribute__((unused)) = true; - - static wchar_t s[4] = L""; - static unsigned i = 0; - - struct : std::wstreambuf - { - int_type - overflow(int_type c) - { - s[i++] = traits_type::to_char_type(c); - return traits_type::not_eof(c); - } - - std::streamsize - xsputn(const wchar_t*, std::streamsize) - { - VERIFY( !"xsputn should not be called" ); - return 0; - } - } sb; - - std::wostream out(&sb); - - out.write(L"0123", 4); - - VERIFY( out.good() ); - VERIFY( 4 == i ); - VERIFY( L'0' == s[0] && L'1' == s[1] && L'2' == s[2] && L'3' == s[3] ); -} - -int main() -{ - test01(); - return 0; -} -- 2.30.2