1*c87b03e5Sespie // prms-id: 9732 2*c87b03e5Sespie 3*c87b03e5Sespie int count; 4*c87b03e5Sespie int bail = 0; 5*c87b03e5Sespie 6*c87b03e5Sespie extern "C" void abort (void); 7*c87b03e5Sespie extern "C" void _exit (int); 8*c87b03e5Sespie 9*c87b03e5Sespie 10*c87b03e5Sespie struct base { basebase11*c87b03e5Sespie base () { ++count; } ~basebase12*c87b03e5Sespie ~base () { --count; } basebase13*c87b03e5Sespie base(const base&o) { ++count; } 14*c87b03e5Sespie }; 15*c87b03e5Sespie 16*c87b03e5Sespie class D { 17*c87b03e5Sespie public: ~D()18*c87b03e5Sespie ~D() { 19*c87b03e5Sespie if (bail++) 20*c87b03e5Sespie { 21*c87b03e5Sespie // On some Linux boxes, we run the dtor for d twice, 22*c87b03e5Sespie // once before exit, and once after! 23*c87b03e5Sespie abort (); 24*c87b03e5Sespie } 25*c87b03e5Sespie else 26*c87b03e5Sespie { 27*c87b03e5Sespie if (count != 0) 28*c87b03e5Sespie _exit (1); 29*c87b03e5Sespie _exit (0); 30*c87b03e5Sespie } 31*c87b03e5Sespie } 32*c87b03e5Sespie } d; 33*c87b03e5Sespie 34*c87b03e5Sespie base base_object; 35*c87b03e5Sespie 36*c87b03e5Sespie base base_returning_function (); 37*c87b03e5Sespie 38*c87b03e5Sespie const base& base_ref = base_returning_function (); 39*c87b03e5Sespie main()40*c87b03e5Sespieint main () { 41*c87b03e5Sespie } 42*c87b03e5Sespie base_returning_function()43*c87b03e5Sespiebase base_returning_function () { 44*c87b03e5Sespie base local_base_object; 45*c87b03e5Sespie return local_base_object; 46*c87b03e5Sespie } 47