mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-22 13:55:00 +08:00
ostream.tcc (ostream::operator<<(_CharT)): Always allocate at least a byte.
2002-03-27 Benjamin Kosnik <bkoz@redhat.com> * include/bits/ostream.tcc (ostream::operator<<(_CharT)): Always allocate at least a byte. * testsuite/18_support/numeric_limits.cc (test_extrema): Make debugger-friendly. * testsuite/27_io/streambuf.cc (test07): Fix. (test06): Enable. From-SVN: r51494
This commit is contained in:
parent
47d0866c79
commit
a3ebd14d24
@ -1,3 +1,13 @@
|
||||
2002-03-27 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/bits/ostream.tcc (ostream::operator<<(_CharT)): Always
|
||||
allocate at least a byte.
|
||||
|
||||
* testsuite/18_support/numeric_limits.cc (test_extrema): Make
|
||||
debugger-friendly.
|
||||
* testsuite/27_io/streambuf.cc (test07): Fix.
|
||||
(test06): Enable.
|
||||
|
||||
2002-03-27 Phil Edwards <pme@gcc.gnu.org>
|
||||
|
||||
* docs/doxygen/Intro.3: Date tweak.
|
||||
|
@ -481,7 +481,7 @@ namespace std
|
||||
try
|
||||
{
|
||||
streamsize __w = __out.width();
|
||||
_CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
|
||||
_CharT* __pads = static_cast<_CharT*>(__builtin_alloca((sizeof(_CharT) * __w) + 1));
|
||||
__pads[0] = __c;
|
||||
streamsize __len = 1;
|
||||
if (__w > __len)
|
||||
|
@ -1,6 +1,6 @@
|
||||
// 1999-08-23 bkoz
|
||||
|
||||
// Copyright (C) 1999, 2001 Free Software Foundation
|
||||
// Copyright (C) 1999, 2001, 2002 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
|
||||
@ -56,33 +56,39 @@ template<typename T>
|
||||
void test_extrema()
|
||||
{
|
||||
bool test = true;
|
||||
VERIFY( extrema<T>::min == std::numeric_limits<T>::min() );
|
||||
VERIFY( extrema<T>::max == std::numeric_limits<T>::max() );
|
||||
T limits_min = std::numeric_limits<T>::min();
|
||||
T limits_max = std::numeric_limits<T>::max();
|
||||
T extrema_min = extrema<T>::min;
|
||||
T extrema_max = extrema<T>::max;
|
||||
VERIFY( extrema_min == limits_min );
|
||||
VERIFY( extrema_max == limits_max );
|
||||
}
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
// This specialization allows the extra precision unmentioned
|
||||
// in system headers yet supported by long double on FreeBSD to
|
||||
// not cause a gratuitous FAIL for the entire test. Using this
|
||||
// technique to compare the residual against epsilon ensures that
|
||||
// any major breakage will still be detected (although obviously not
|
||||
// as tight as the exact equality check that would have been generated
|
||||
// by default). This replacement test is allowable by the fact that
|
||||
// C++ limits should match the system provided limits for C even if
|
||||
// they were wrong verses the actual FP hardware.
|
||||
// This specialization allows the extra precision unmentioned in
|
||||
// system headers yet supported by long double on FreeBSD or Solaris
|
||||
// to not cause a gratuitous FAIL for the entire test. Using this
|
||||
// technique to compare the residual against epsilon ensures that any
|
||||
// major breakage will still be detected (although obviously not as
|
||||
// tight as the exact equality check that would have been generated by
|
||||
// default). This replacement test is allowable by the fact that C++
|
||||
// limits should match the system provided limits for C even if they
|
||||
// were wrong verses the actual FP hardware.
|
||||
template<>
|
||||
void test_extrema<long double>()
|
||||
{
|
||||
typedef long double T;
|
||||
bool test = true;
|
||||
VERIFY( (extrema<T>::min - std::numeric_limits<T>::min())
|
||||
< std::numeric_limits<T>::epsilon() );
|
||||
VERIFY( (std::numeric_limits<T>::min() - extrema<T>::min)
|
||||
< std::numeric_limits<T>::epsilon() );
|
||||
VERIFY( (extrema<T>::max / std::numeric_limits<T>::max())
|
||||
< (1 + std::numeric_limits<T>::epsilon()) );
|
||||
VERIFY( (std::numeric_limits<T>::max() / extrema<T>::max)
|
||||
< (1 + std::numeric_limits<T>::epsilon()) );
|
||||
T limits_min = std::numeric_limits<T>::min();
|
||||
T limits_max = std::numeric_limits<T>::max();
|
||||
T extrema_min = extrema<T>::min;
|
||||
T extrema_max = extrema<T>::max;
|
||||
T epsilon = std::numeric_limits<T>::epsilon();
|
||||
|
||||
VERIFY( (extrema_min - limits_min) < epsilon );
|
||||
VERIFY( (limits_min - extrema_min) < epsilon );
|
||||
VERIFY( (extrema_max - limits_max) < (1 + epsilon) );
|
||||
VERIFY( (limits_max - extrema_max) < (1 + epsilon) );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// 1999-10-11 bkoz
|
||||
|
||||
// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
// Copyright (C) 1999, 2000, 2001, 2002 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
|
||||
@ -329,15 +329,12 @@ void test05()
|
||||
}
|
||||
|
||||
// test06
|
||||
// XXX this should work, doesn't due to compiler limitations.
|
||||
#if 0
|
||||
namespace gnu
|
||||
{
|
||||
class something_derived;
|
||||
}
|
||||
|
||||
class gnu::something_derived : std::streambuf { };
|
||||
#endif
|
||||
|
||||
// libstdc++/3599
|
||||
class testbuf2 : public std::streambuf
|
||||
@ -356,11 +353,15 @@ protected:
|
||||
void
|
||||
test07()
|
||||
{
|
||||
bool test = true;
|
||||
testbuf2 ob;
|
||||
std::ostream out(&ob);
|
||||
|
||||
VERIFY(out << "gasp");
|
||||
VERIFY(out << std::endl);
|
||||
out << "gasp";
|
||||
VERIFY(out.good());
|
||||
|
||||
out << std::endl;
|
||||
VERIFY(out.good());
|
||||
}
|
||||
|
||||
int main()
|
||||
|
Loading…
Reference in New Issue
Block a user