41 lines
516 B
C
41 lines
516 B
C
// PR c++/5757
|
|
// Test that when a constructor throws in a new-expression, we pass the
|
|
// right pointer to operator delete.
|
|
|
|
// { dg-do run }
|
|
|
|
#include <new>
|
|
|
|
int ret = 1;
|
|
|
|
void *ptr;
|
|
void * operator new[] (size_t s) throw (std::bad_alloc)
|
|
{
|
|
ptr = operator new (s);
|
|
return ptr;
|
|
}
|
|
|
|
void operator delete[] (void *p) throw ()
|
|
{
|
|
if (p == ptr)
|
|
ret = 0;
|
|
operator delete (p);
|
|
}
|
|
|
|
struct A
|
|
{
|
|
A() { throw 1; }
|
|
~A() {}
|
|
};
|
|
|
|
int
|
|
main ()
|
|
{
|
|
try
|
|
{
|
|
A *p = new A[4];
|
|
}
|
|
catch (...) {}
|
|
return ret;
|
|
}
|