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