1 // { dg-do run } 2 // Origin: Mark Mitchell <mark@codesourcery.com> 3 4 #include <stdlib.h> 5 6 struct S { 7 ~S (); 8 }; 9 10 bool flag; 11 S* s1; 12 S* s2; 13 new(size_t s)14void* operator new (size_t s) 15 { 16 return malloc (s); 17 } 18 delete(void * p)19void operator delete (void* p) 20 { 21 if (flag && p != s2) 22 abort (); 23 } 24 ~S()25S::~S () { 26 if (this != s2) 27 abort (); 28 s1 = 0; 29 } 30 main()31int main () { 32 s2 = new S; 33 s1 = s2; 34 // Turn on the check in `operator delete'. 35 flag = true; 36 delete s1; 37 // Turn it off again so that normal shutdown code works. 38 flag = false; 39 } 40 41