libgcc: Fix a warning/error in libgcc2.c [PR117624]
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.eh / new1.C
blob5020a6bb58c7289d7c7d821a221a0120697a5077
1 // { dg-do run  }
2 // Test that a throw in foo destroys the A, but does not free the memory.
3 // Avoid use of none-overridable new/delete operators in shared
4 // { dg-options "-static" { target *-*-mingw* } }
5 // { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } }
7 #include <cstddef>
8 #include <cstdlib>
9 #include <new>
11 struct A {
12   A();
13   ~A();
16 struct B {
17   B (A);
20 void foo (B*);
22 int newed, created;
24 int main ()
26   try {
27     foo (new B (A ()));
28   } catch (...) { }
30   return !(newed && !created);
33 A::A() { created = 1; }
34 A::~A() { created = 0; }
35 B::B(A) { }
36 void foo (B*) { throw 1; }
38 void* operator new (size_t size)
39 #if __cplusplus <= 199711L
40   throw (std::bad_alloc)
41 #endif
43   ++newed;
44   return (void *) std::malloc (size);
47 void operator delete (void *p) throw ()
49   --newed;
50   std::free (p);