OSDN Git Service

* gcc.dg/20020201-1.c: Use cleanup-coverage_files.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.old-deja / g++.eh / new1.C
1 // { dg-do run  }
2 // Test that a throw in foo destroys the A, but does not free the memory.
3
4 #include <cstddef>
5 #include <cstdlib>
6 #include <new>
7
8 struct A {
9   A();
10   ~A();
11 };
12
13 struct B {
14   B (A);
15 };
16
17 void foo (B*);
18
19 int newed, created;
20
21 int main ()
22 {
23   try {
24     foo (new B (A ()));
25   } catch (...) { }
26
27   return !(newed && !created);
28 }
29
30 A::A() { created = 1; }
31 A::~A() { created = 0; }
32 B::B(A) { }
33 void foo (B*) { throw 1; }
34
35 void* operator new (size_t size) throw (std::bad_alloc)
36 {
37   ++newed;
38   return (void *) std::malloc (size);
39 }
40
41 void operator delete (void *p) throw ()
42 {
43   --newed;
44   std::free (p);
45 }
46
47
48
49