69 lines
669 B
C
69 lines
669 B
C
// { 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);
|
|
}
|