1 // { dg-do run { xfail { ! cxa_atexit } } } 2 // Objects must be destructed in decreasing cnt order 3 // Original test attributed to James Kanze <jkanze@otelo.ibmmail.com> 4 5 extern "C" void abort (); 6 7 static int cnt; 8 9 class A { 10 int myCnt; 11 public: A()12 A() : myCnt(cnt++) {} ~A()13 ~A() { if (--cnt != myCnt) abort(); } 14 }; 15 f()16void f() { static A a; /* a.myCnt == 1 */ } 17 18 class B { 19 int myCnt; 20 public: B()21 B() : myCnt(cnt+1) { f(); ++cnt; } ~B()22 ~B() { if (--cnt != myCnt) abort(); } 23 }; 24 25 static A a1; // a1.myCnt == 0 26 static B b1; // b1.myCnt == 2 27 static A a2; // a2.myCnt == 3 28 main()29int main() {} 30