Automatic Copyright Year update after running gdb/copyright.py
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.cp / try_catch.cc
1 /* This test script is part of GDB, the GNU debugger.
2
3 Copyright 2002-2022 Free Software Foundation, Inc.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
17
18 #include <exception>
19 #include <stdexcept>
20 #include <string>
21 #include <string.h>
22
23 enum region { oriental, egyptian, greek, etruscan, roman };
24
25 // Test one.
26 class gnu_obj_1
27 {
28 public:
29 typedef region antiquities;
30 const bool test;
31 const int key1;
32 long key2;
33
34 antiquities value;
35
36 gnu_obj_1(antiquities a, long l): test(true), key1(5), key2(l), value(a) {}
37 };
38
39 // Test two.
40 template<typename T>
41 class gnu_obj_2: public virtual gnu_obj_1
42 {
43 public:
44 antiquities value_derived;
45
46 gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7), value_derived(b) { }
47 };
48
49 // Test three.
50 template<typename T>
51 class gnu_obj_3
52 {
53 public:
54 typedef region antiquities;
55 gnu_obj_2<int> data;
56
57 gnu_obj_3(antiquities b): data(etruscan) { }
58 };
59
60 int main()
61 {
62 bool test = true;
63 const int i = 5;
64 int j = i;
65 gnu_obj_2<long> test2(roman);
66 gnu_obj_3<long> test3(greek);
67
68 // 1
69 try
70 {
71 ++j;
72 throw gnu_obj_1(egyptian, 4589); // marker 1-throw
73 }
74 catch (gnu_obj_1& obj)
75 {
76 ++j;
77 if (obj.value != egyptian) // marker 1-catch
78 test &= false;
79 if (obj.key2 != 4589)
80 test &= false;
81 }
82 catch (...)
83 {
84 j = 0;
85 test &= false;
86 }
87
88 // 2
89 try
90 {
91 ++j; // marker 2-start
92 try
93 {
94 ++j; // marker 2-next
95 try
96 {
97 ++j;
98 throw gnu_obj_1(egyptian, 4589); // marker 2-throw
99 }
100 catch (gnu_obj_1& obj)
101 {
102 ++j;
103 if (obj.value != egyptian) // marker 2-catch
104 test &= false;
105 if (obj.key2 != 4589)
106 test &= false;
107 }
108 }
109 catch (gnu_obj_1& obj)
110 {
111 ++j;
112 if (obj.value != egyptian)
113 test &= false;
114 if (obj.key2 != 4589)
115 test &= false;
116 }
117 }
118 catch (...)
119 {
120 j = 0;
121 test &= false;
122 }
123
124 // 3 use standard library
125 using namespace std;
126 try
127 {
128 if (j < 100)
129 throw invalid_argument("gdb.1"); // marker 3-throw
130 }
131 catch (exception& obj)
132 {
133 if (strcmp (obj.what(), "gdb.1") != 0) // marker 3-catch
134 test &= false;
135 }
136 return 0; // marker test-complete
137 }
This page took 0.03144 seconds and 4 git commands to generate.