Sync usage with man page.
[netbsd-mini2440.git] / gnu / dist / gcc4 / gcc / testsuite / g++.dg / init / array16.C
blobbe65219075bde014bb845a8096acc0385ce86722
1 // Causes timeout for the MMIX simulator on a 3GHz P4 and we can't
2 // have "compile" for some targets and "run" for others.
3 // { dg-do run { target { ! mmix-*-* } } }
4 // { dg-options "-mstructure-size-boundary=8" { target arm-*-* } }
6 // Copyright (C) 2004 Free Software Foundation, Inc.
7 // Contributed by Nathan Sidwell 8 Dec 2004 <nathan@codesourcery.com>
9 // PR 16681 too much memory used
10 // Origin:  Matt LaFary <lafary@activmedia.com>
12 // NOTE: This test assumes that 4M instances of struct ELT can fit into
13 //       a 5MB array.  This isn't true, e.g., with the default
14 //       arm-none-elf options.
16 struct elt 
18   static int count;
19   static elt*ptr;
20   static int abort;
21   char c;
22   
23   elt ();
24   ~elt ();
25   
28 int elt::count;
29 elt *elt::ptr;
30 int elt::abort;
32 elt::elt ()
33   :c ()
35   if (count >= 0)
36     {
37       if (!ptr)
38         ptr = this;
39       if (count == 100)
40         throw 2;
41       if (this != ptr)
42         abort = 1;
43       count++;
44       ptr++;
45     }
48 elt::~elt ()
50   if (count >= 0)
51     {
52       ptr--;
53       count--;
54       if (ptr != this)
55         abort = 2;
56     }
59 struct foo {
60   elt buffer[4111222];
61   foo() ;
62   bool check () const;
65 foo::foo ()
66   : buffer()
69 bool foo::check () const
71   for (unsigned ix = sizeof (buffer)/ sizeof (buffer[0]); ix--;)
72     if (buffer[ix].c)
73       return false;
74   return true;
77 void *operator new (__SIZE_TYPE__ size, void *p)
79   return p;
82 char heap[5000000];
84 int main ()
86   for (unsigned ix = sizeof (heap); ix--;)
87     heap[ix] = ix;
89   try
90     {
91       foo *f = new (heap) foo ();
92       return 1;
93     }
94   catch (...)
95     {
96       if (elt::count)
97         return 2;
98       if (elt::abort)
99         return elt::abort + 3;
100     }
102   for (unsigned ix = sizeof (heap); ix--;)
103     heap[ix] = ix;
105   elt::count = -1;
106   foo *f = new (heap) foo ();
107   if (!f->check ())
108     return 3;
109   return 0;
112