// Bug: We were calling f() twice, for both the placement new and placement
// delete calls.

// { dg-do run }

void* operator new    (__SIZE_TYPE__ sz, void*) { return operator new (sz); }
void  operator delete (void* p, void*)         { operator delete (p); }

struct A { A() { throw 1; } };

int c;
void *f() { ++c; return 0; }

int main()
{
  try
    {
      new (f()) A;
    }
  catch (...) {}
  return c != 1;
}