blob: 7913c09ae63adca2ccb0124259323ffddd1b258d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// { 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);
}
|