X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Ftestsuite%2F27_io%2Fios_base%2Fstorage%2F2.cc;fp=libstdc%2B%2B-v3%2Ftestsuite%2F27_io%2Fios_base%2Fstorage%2F2.cc;h=5c695973a53b5c7b2c0f1d9ba10a3c284874814f;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=0000000000000000000000000000000000000000;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc b/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc new file mode 100644 index 00000000..5c695973 --- /dev/null +++ b/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc @@ -0,0 +1,143 @@ +// 2000-12-19 bkoz + +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 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 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 +// . + +// 27.4.2.5 ios_base storage functions + +// XXX This test will not work for some versions of irix6 because of +// XXX bug(s) in libc malloc for very large allocations. However +// XXX -lmalloc seems to work. +// See http://gcc.gnu.org/ml/gcc/2002-05/msg01012.html +// { dg-options "-lmalloc" { target mips*-*-irix6* } } + +// This fails on some versions of Darwin 8 because malloc doesn't return +// NULL even if an allocation fails (filed as Radar 3884894). +// { dg-do run { xfail *-*-darwin8.[0-4].* } } + +// Skip test at -m64 on Darwin because RLIMITS are not being honored. +// Radar 6467883: 10.4/10.5 setrlimits are not honored by memory allocators +// Radar 6467884: 10.X systems are not robust when paging space is exceeded +// { dg-skip-if "" { *-*-darwin* && lp64 } { "*" } { "" } } + +#include +#include +#include +#include + +// libstdc++/3129 +void test02() +{ + bool test __attribute__((unused)) = true; + int max = std::numeric_limits::max() - 1; + std::stringbuf strbuf; + std::ios ios(&strbuf); + + ios.exceptions(std::ios::badbit); + + long l = 0; + void* v = 0; + + // pword + ios.pword(1) = v; + VERIFY( ios.pword(1) == v ); + + try + { + v = ios.pword(max); + } + catch(std::ios_base::failure& obj) + { + // Ok. + VERIFY( ios.bad() ); + } + catch(...) + { + test = false; + VERIFY( test ); + } + VERIFY( v == 0 ); + + VERIFY( ios.pword(1) == v ); + + // max is different code path from max-1 + v = &test; + try + { + v = ios.pword(std::numeric_limits::max()); + } + catch(std::ios_base::failure& obj) + { + // Ok. + VERIFY( ios.bad() ); + } + catch(...) + { + test = false; + VERIFY( test ); + } + VERIFY( v == &test ); + + // iword + ios.iword(1) = 1; + VERIFY( ios.iword(1) == 1 ); + + try + { + l = ios.iword(max); + } + catch(std::ios_base::failure& obj) + { + // Ok. + VERIFY( ios.bad() ); + } + catch(...) + { + test = false; + VERIFY( test ); + } + VERIFY( l == 0 ); + + VERIFY( ios.iword(1) == 1 ); + + // max is different code path from max-1 + l = 1; + try + { + l = ios.iword(std::numeric_limits::max()); + } + catch(std::ios_base::failure& obj) + { + // Ok. + VERIFY( ios.bad() ); + } + catch(...) + { + test = false; + VERIFY( test ); + } + VERIFY( l == 1 ); + +} + +int main(void) +{ + __gnu_test::set_memory_limits(); + test02(); + return 0; +}