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*c87b03e5Sespie int main () {
41*c87b03e5Sespie }
42*c87b03e5Sespie 
base_returning_function()43*c87b03e5Sespie base base_returning_function () {
44*c87b03e5Sespie   base local_base_object;
45*c87b03e5Sespie   return local_base_object;
46*c87b03e5Sespie }
47