OSDN Git Service

PR c++/7050
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / eh / cond1.C
1 // PR c++/7050
2 // { dg-do run }
3
4 extern "C" void abort(void);
5
6 #define CI(stmt) try { stmt; abort(); } catch (int) { }
7
8 struct has_destructor
9 {
10     ~has_destructor() { }
11 };
12
13 struct no_destructor
14 {
15 };
16
17 int PI(int& i) { return i++; }
18
19 int main(int argc, char *argv[])
20 {
21     (argc+1 ? has_destructor() : throw 0);
22     CI((argc+1 ? throw 0 : has_destructor()));
23     CI((0 ? has_destructor() : throw 0));
24     CI((1 ? throw 0 : has_destructor()));
25     (0 ? throw 0 : has_destructor());
26     (1 ? has_destructor() : throw 0);
27
28     (argc+1 ? no_destructor() : throw 0);
29     CI((argc+1 ? throw 0 : no_destructor()));
30     CI((0 ? no_destructor() : throw 0));
31     CI((1 ? throw 0 : no_destructor()));
32     (0 ? throw 0 : no_destructor());
33     (1 ? no_destructor() : throw 0);
34
35     int i = 1;
36     CI(throw PI(i));
37     if (i != 2) abort();
38
39     (1 ? 0 : throw PI(i));
40     if (i != 2) abort();
41
42     CI(0 ? 0 : throw PI(i));
43     if (i != 3) abort();
44
45     CI(0 ? has_destructor() : throw PI(i));
46     if (i != 4) abort();
47     (argc+1 ? has_destructor() : throw PI(i));
48     if (i != 4) abort();
49
50     i = 1;
51     CI(throw i++);
52     if (i != 2) abort();
53
54     (1 ? 0 : throw i++);
55     if (i != 2) abort();
56
57     CI(0 ? 0 : throw i++);
58     if (i != 3) abort();
59
60     CI(0 ? has_destructor() : throw i++);
61     if (i != 4) abort();
62     (argc+1 ? has_destructor() : throw i++);
63     if (i != 4) abort();
64 }