// 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>
#include <stddef.h>

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;
}
