]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/27_io/ios_base_storage.cc
emit-rtl.c (gen_lowpart): When requesting the low-part of a MEM...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / ios_base_storage.cc
CommitLineData
713c16f8
BK
1// 2000-12-19 bkoz
2
2e812a0a 3// Copyright (C) 2000, 2002, 2003 Free Software Foundation
713c16f8
BK
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING. If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// 27.4.2.5 ios_base storage functions
22
58c3ef5c
KG
23// XXX This test will not work for some versions of irix6 because of
24// XXX bug(s) in libc malloc for very large allocations. However
25// XXX -lmalloc seems to work.
26// See http://gcc.gnu.org/ml/gcc/2002-05/msg01012.html
27// { dg-options "-lmalloc" { target mips*-*-irix6* } }
28
713c16f8
BK
29#include <sstream>
30#include <iostream>
31
fe413112 32#include <testsuite_hooks.h>
713c16f8
BK
33
34// http://gcc.gnu.org/ml/gcc-bugs/2000-12/msg00413.html
35void test01()
36{
37 bool test = true;
38
39 using namespace std;
40
41 long x1 = ios::xalloc();
42 long x2 = ios::xalloc();
43 long x3 = ios::xalloc();
44 long x4 = ios::xalloc();
45
46 ostringstream out("the element of crime, lars von trier");
47 out.pword(++x4); // should not crash
48}
49
663653eb
BK
50// libstdc++/3129
51void test02()
52{
53 bool test = true;
d02475fd 54 int max = std::numeric_limits<int>::max() - 1;
663653eb
BK
55 std::stringbuf strbuf;
56 std::ios ios(&strbuf);
57
58 long l = 0;
59 void* v = 0;
60
61 // pword
62 try
63 {
64 v = ios.pword(max);
65 }
66 catch(std::ios_base::failure& obj)
67 {
68 // Ok.
69 VERIFY( ios.bad() );
70 }
71 catch(...)
72 {
73 VERIFY( test = false );
74 }
75 VERIFY( v == 0 );
76
77 // iword
78 try
79 {
80 l = ios.iword(max);
81 }
82 catch(std::ios_base::failure& obj)
83 {
84 // Ok.
85 VERIFY( ios.bad() );
86 }
87 catch(...)
88 {
89 VERIFY( test = false );
90 }
91 VERIFY( l == 0 );
92}
713c16f8 93
53ec7ec1
JQ
94class derived : public std::ios_base
95{
96public:
97 derived() {}
98};
99
100void test03()
101{
102 derived d;
103
104 d.pword(0) = &d;
105 d.iword(0) = 1;
106}
107
713c16f8
BK
108int main(void)
109{
2e812a0a 110 __gnu_cxx_test::set_memory_limits();
713c16f8 111 test01();
663653eb 112 test02();
53ec7ec1 113 test03();
713c16f8
BK
114 return 0;
115}