// { dg-do run } // Origin: Mark Mitchell #include struct S { ~S (); }; bool flag; S* s1; S* s2; void* operator new (size_t s) { return malloc (s); } void operator delete (void* p) { if (flag && p != s2) abort (); } S::~S () { if (this != s2) abort (); s1 = 0; } int main () { s2 = new S; s1 = s2; // Turn on the check in `operator delete'. flag = true; delete s1; // Turn it off again so that normal shutdown code works. flag = false; }