mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-30 07:14:09 +08:00
re PR libstdc++/11460 (Incorrect use of int_type in strstreambuf::pbackfail)
2003-10-12 Petur Runolfsson <peturr02@ru.is> Paolo Carlini <pcarlini@unitus.it> PR libstdc++/11460 * src/strstream.cc (pbackfail): Fix to use to_int_type. * testsuite/backward/11460.cc: New, from the PR. Co-Authored-By: Paolo Carlini <pcarlini@unitus.it> From-SVN: r72405
This commit is contained in:
parent
cc956bfdf4
commit
a62e73117f
@ -1,3 +1,10 @@
|
||||
2003-10-12 Petur Runolfsson <peturr02@ru.is>
|
||||
Paolo Carlini <pcarlini@unitus.it>
|
||||
|
||||
PR libstdc++/11460
|
||||
* src/strstream.cc (pbackfail): Fix to use to_int_type.
|
||||
* testsuite/backward/11460.cc: New, from the PR.
|
||||
|
||||
2003-10-12 Paolo Carlini <pcarlini@unitus.it>
|
||||
|
||||
* config/locale/ieee_1003.1-2001/codecvt_specializations.h:
|
||||
|
@ -194,7 +194,7 @@ namespace std
|
||||
gbump(-1);
|
||||
return _Traits::not_eof(c);
|
||||
}
|
||||
else if (c == static_cast<int_type>(gptr()[-1]))
|
||||
else if (c == _Traits::to_int_type(gptr()[-1]))
|
||||
{ // KLUDGE
|
||||
gbump(-1);
|
||||
return c;
|
||||
|
73
libstdc++-v3/testsuite/backward/11460.cc
Normal file
73
libstdc++-v3/testsuite/backward/11460.cc
Normal file
@ -0,0 +1,73 @@
|
||||
// Copyright (C) 2003 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 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
// USA.
|
||||
|
||||
#include <strstream>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
// { dg-options "-Wno-deprecated" }
|
||||
|
||||
class Buf : public std::strstreambuf
|
||||
{
|
||||
public:
|
||||
Buf(const char* p, std::streamsize n)
|
||||
: std::strstreambuf(p, n)
|
||||
{ }
|
||||
|
||||
int_type pub_pbackfail(int_type c = traits_type::eof())
|
||||
{
|
||||
return pbackfail(c);
|
||||
}
|
||||
};
|
||||
|
||||
// libstdc++/11460
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
typedef std::strstreambuf::traits_type Traits;
|
||||
const char str[] = "a\xff";
|
||||
|
||||
Buf buf(str, 2);
|
||||
|
||||
Traits::int_type a = Traits::to_int_type('a');
|
||||
VERIFY( buf.sbumpc() == a );
|
||||
VERIFY( buf.sungetc() == a );
|
||||
VERIFY( buf.sbumpc() == a );
|
||||
VERIFY( buf.sputbackc('a') == a );
|
||||
VERIFY( buf.sbumpc() == a );
|
||||
VERIFY( buf.pub_pbackfail() != Traits::eof() );
|
||||
VERIFY( buf.sbumpc() == a );
|
||||
VERIFY( buf.pub_pbackfail(a) == a );
|
||||
buf.sbumpc();
|
||||
|
||||
Traits::int_type xff = Traits::to_int_type('\xff');
|
||||
VERIFY( buf.sbumpc() == xff );
|
||||
VERIFY( buf.sungetc() == xff );
|
||||
VERIFY( buf.sbumpc() == xff );
|
||||
VERIFY( buf.sputbackc('\xff') == xff );
|
||||
VERIFY( buf.sbumpc() == xff );
|
||||
VERIFY( buf.pub_pbackfail() != Traits::eof() );
|
||||
VERIFY( buf.sbumpc() == xff );
|
||||
VERIFY( buf.pub_pbackfail(xff) == xff );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user