* g++.dg/eh/new1.C: XFAIL on AIX.
[official-gcc.git] / gcc / testsuite / g++.dg / eh / delete1.C
blob64ccb50cbf7ef3b2fb6ea97e32dd820825dbdd47
1 // { dg-do run }
2 // { dg-xfail-run-if "AIX operator delete" { powerpc-ibm-aix* } }
4 // pr 55635, the delete operator must be called, regardless of whether
5 // the dtor throws
7 static int deleted;
9 void operator delete (void *) throw ()
11   deleted = 1;
14 struct Foo {
15   ~Foo() throw(int) {throw 1;}
18 struct Baz {
19   void operator delete (void *) throw ()
20   {
21     deleted = 2;
22   }
23   virtual ~Baz() throw(int) {throw 1;}
26 int non_virt ()
28   deleted = 0;
29   
30   Foo *p = new Foo;
31   try { delete p; }
32   catch (...) { return deleted != 1;}
33   return 1;
36 int virt_glob ()
38   deleted = 0;
39   
40   Baz *p = ::new Baz;
41   try { ::delete p; }
42   catch (...) { return deleted != 1;}
43   return 1;
46 int virt_del ()
48   deleted = 0;
49   
50   Baz *p = new Baz;
51   try { delete p; }
52   catch (...) { return deleted != 2;}
53   return 1;
56 int ary ()
58   deleted = 0;
60   Baz *p = new Baz[5];
61   try { delete[] p; }
62   catch (...) { return deleted != 1;}
63   return 1;
66 int main ()
68   if (non_virt ())
69     return 1;
71   if (virt_glob ())
72     return 2;
74   if (virt_del ())
75     return 3;
77   if (ary ())
78     return 4;
79   
80   return 0;