| // { dg-do run } | |
| // check cleanup of partial array objects | |
| extern "C" void abort (void); | |
| extern "C" void exit (int); | |
| int ctor = 0; | |
| int dtor = 0; | |
| int cnt = 1; | |
| struct A { | |
| int x; | |
| A(); | |
| A(const A&); | |
| ~A(); | |
| }; | |
| A::A() | |
| { | |
| if (cnt == 10) | |
| throw 57; | |
| x = cnt++; | |
| ctor++; | |
| } | |
| A::A(const A&) | |
| { | |
| if (cnt == 10) | |
| throw 57; | |
| x = cnt++; | |
| ctor++; | |
| } | |
| A::~A() | |
| { | |
| if (x + 1 != cnt--) | |
| abort(); | |
| dtor++; | |
| } | |
| void f() | |
| { | |
| A a[] = {A(), A(), A(), A(), A(), A(), A(), A(), A(), A(), A(), A()}; | |
| throw -1066; | |
| } | |
| int | |
| main() | |
| { | |
| int flag; | |
| flag = 0; | |
| try { | |
| f(); | |
| } | |
| catch (int) { | |
| flag = 1; | |
| } | |
| if (!flag) | |
| abort(); | |
| if (ctor != 9) | |
| abort(); | |
| if (dtor != 9) | |
| abort(); | |
| exit(0); | |
| } |