diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.other/init5.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/init5.C | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.other/init5.C b/gcc/testsuite/g++.old-deja/g++.other/init5.C new file mode 100644 index 000000000..7bb263a93 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/init5.C @@ -0,0 +1,29 @@ +// { dg-do run { xfail { ! cxa_atexit } } } +// Objects must be destructed in decreasing cnt order +// Original test attributed to James Kanze <jkanze@otelo.ibmmail.com> + +extern "C" void abort (); + +static int cnt; + +class A { + int myCnt; +public: + A() : myCnt(cnt++) {} + ~A() { if (--cnt != myCnt) abort(); } +}; + +void f() { static A a; /* a.myCnt == 1 */ } + +class B { + int myCnt; +public: + B() : myCnt(cnt+1) { f(); ++cnt; } + ~B() { if (--cnt != myCnt) abort(); } +}; + +static A a1; // a1.myCnt == 0 +static B b1; // b1.myCnt == 2 +static A a2; // a2.myCnt == 3 + +int main() {} |