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()16 void 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()29 int main() {}
30