| // APPLE LOCAL file 4484188 | |
| // { dg-do run } | |
| #include <stdlib.h> | |
| #define assert(x) do { if (! (x)) abort(); } while (0) | |
| int count = 0; | |
| class A | |
| { | |
| public: | |
| explicit A(int i); | |
| ~A(); | |
| int i; | |
| A(const A&); | |
| A& operator=(const A&); | |
| }; | |
| A::A(int i_) | |
| : i(i_) | |
| { | |
| } | |
| A::~A() | |
| { | |
| assert(++count == i); | |
| i = -1; | |
| } | |
| extern "C" { | |
| void one() | |
| { | |
| static bool second_time; | |
| if (second_time) | |
| assert(++count == 9); | |
| else | |
| { | |
| assert(++count == 1); | |
| second_time = true; | |
| } | |
| static A a(10); | |
| assert(a.i == 10); | |
| } | |
| void two() | |
| { | |
| assert(++count == 7); | |
| static A a(8); | |
| assert(a.i == 8); | |
| } | |
| void three() | |
| { | |
| assert(++count == 2); | |
| static A a(6); | |
| assert(a.i == 6); | |
| } | |
| void five() | |
| { | |
| assert(++count == 4); | |
| static A a(5); | |
| assert(a.i == 5); | |
| } | |
| void four() | |
| { | |
| assert(++count == 3); | |
| atexit(five); | |
| } | |
| } | |
| A zero(11); | |
| int main() | |
| { | |
| one(); | |
| atexit(one); | |
| atexit(two); | |
| three(); | |
| atexit(four); | |
| } |