Index: gcc/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc |
diff --git a/gcc/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc b/gcc/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc |
deleted file mode 100644 |
index 8bf915debeda46ccef5dcbceb73c01b4679ff30a..0000000000000000000000000000000000000000 |
--- a/gcc/libstdc++-v3/testsuite/27_io/basic_filebuf/underflow/wchar_t/11603.cc |
+++ /dev/null |
@@ -1,199 +0,0 @@ |
-// Copyright (C) 2003, 2004, 2009 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/>. |
- |
-// 27.8.1.4 Overridden virtual functions |
- |
-#include <fstream> |
-#include <locale> |
-#include <testsuite_hooks.h> |
- |
-template <typename InternT, typename StateT = std::mbstate_t> |
-class checksumcvt : public std::codecvt<InternT, char, StateT> |
-{ |
- typedef std::codecvt<InternT, char, StateT> Base; |
- static const std::size_t width = sizeof(InternT) + 1; |
- |
-public: |
- typedef InternT intern_type; |
- typedef char extern_type; |
- |
- explicit checksumcvt(std::size_t refs = 0) |
- : Base(refs) |
- { } |
- |
-protected: |
- virtual std::codecvt_base::result |
- do_out(StateT&, const intern_type* from, |
- const intern_type* from_end, const intern_type*& from_next, |
- extern_type* to, extern_type* to_end, |
- extern_type*& to_next) const |
- { |
- size_t len = std::min(static_cast<size_t>(from_end - from), |
- static_cast<size_t>(to_end - to) / width); |
- |
- while (len--) |
- { |
- const char* p = |
- reinterpret_cast<const char*>(from); |
- unsigned char checksum = 0; |
- |
- for (std::size_t i = 0; i < sizeof(intern_type); ++i) |
- { |
- *to++ = p[i]; |
- checksum ^= static_cast<unsigned char>(p[i]); |
- } |
- |
- *to++ = checksum; |
- ++from; |
- } |
- |
- from_next = from; |
- to_next = to; |
- return from_next == from_end ? std::codecvt_base::ok |
- : std::codecvt_base::partial; |
- } |
- |
- virtual std::codecvt_base::result |
- do_unshift(StateT&, extern_type* to, |
- extern_type*, extern_type*& to_next) const |
- { |
- to_next = to; |
- return std::codecvt_base::ok; |
- } |
- |
- virtual std::codecvt_base::result |
- do_in(StateT&, const extern_type* from, |
- const extern_type* from_end, const extern_type*& from_next, |
- intern_type* to, intern_type* to_end, |
- intern_type*& to_next) const |
- { |
- size_t len = std::min(static_cast<size_t>(to_end - to), |
- static_cast<size_t>(from_end - from) / width); |
- |
- while (len) |
- { |
- const char* f = from; |
- intern_type tmp; |
- char* p = reinterpret_cast<char*>(&tmp); |
- unsigned char checksum = 0; |
- |
- for (std::size_t i = 0; i < sizeof(intern_type); ++i) |
- { |
- p[i] = *f; |
- checksum ^= static_cast<unsigned char>(*f++); |
- } |
- |
- if (*f++ != checksum) |
- break; |
- |
- from = f; |
- *to++ = tmp; |
- len--; |
- } |
- |
- from_next = from; |
- to_next = to; |
- return len ? std::codecvt_base::error : |
- (from_next == from_end ? std::codecvt_base::ok |
- : std::codecvt_base::partial); |
- } |
- |
- virtual int |
- do_encoding() const throw() |
- { return width; } |
- |
- virtual int |
- do_length(const StateT&, const extern_type* from, |
- const extern_type* end, size_t max) const |
- { |
- size_t len = std::min(max, |
- static_cast<size_t>(end - from) / width); |
- |
- int ret = 0; |
- while (len--) |
- { |
- unsigned char checksum = 0; |
- |
- for (std::size_t i = 0; i < sizeof(intern_type); ++i) |
- { |
- checksum ^= static_cast<unsigned char>(*from++); |
- } |
- |
- if (*from++ != checksum) |
- break; |
- |
- ret++; |
- } |
- |
- return ret; |
- } |
- |
- virtual int |
- do_max_length() const throw() |
- { return width; } |
- |
- virtual bool |
- do_always_noconv() const throw() |
- { return false; } |
-}; |
- |
-class Buf : public std::wfilebuf |
-{ |
-public: |
- std::streamsize pub_showmanyc() |
- { return showmanyc(); } |
- std::wfilebuf::int_type pub_underflow() |
- { return underflow(); } |
-}; |
- |
-// libstdc++/11603 |
-void test01() |
-{ |
- using namespace std; |
- bool test __attribute__((unused)) = true; |
- |
- filebuf fbout; |
- fbout.open("tmp_11603", ios_base::out); |
- fbout.sputn("aaaab", 5); |
- fbout.close(); |
- |
- locale loc(locale::classic(), new checksumcvt<wchar_t>); |
- |
- Buf fb; |
- fb.pubimbue(loc); |
- fb.open("tmp_11603", ios_base::in); |
- VERIFY( fb.pub_showmanyc() == 1 ); |
- |
- try |
- { |
- wfilebuf::int_type ret = fb.pub_underflow(); |
- VERIFY( ret != wfilebuf::traits_type::eof() ); |
- fb.sbumpc(); |
- ret = fb.pub_underflow(); |
- VERIFY( ret == wfilebuf::traits_type::eof() ); |
- } |
- catch (...) |
- { } |
- |
- fb.close(); |
-} |
- |
-int main() |
-{ |
- test01(); |
- return 0; |
-} |