annotate libcxxabi/test/catch_ptr_02.pass.cpp @ 192:d7606dcf6fce

Added tag llvm10 for changeset 0572611fdcc8
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2020 18:01:34 +0900
parents 0572611fdcc8
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===------------------------- catch_ptr_02.cpp ---------------------------===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
9 // UNSUPPORTED: no-exceptions
150
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 #include <cassert>
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 // Clang emits warnings about exceptions of type 'Child' being caught by
anatofuz
parents:
diff changeset
14 // an earlier handler of type 'Base'. Congrats clang, you've just
anatofuz
parents:
diff changeset
15 // diagnosed the behavior under test.
anatofuz
parents:
diff changeset
16 #if defined(__clang__)
anatofuz
parents:
diff changeset
17 #pragma clang diagnostic ignored "-Wexceptions"
anatofuz
parents:
diff changeset
18 #endif
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 #if __cplusplus < 201103L
anatofuz
parents:
diff changeset
21 #define DISABLE_NULLPTR_TESTS
anatofuz
parents:
diff changeset
22 #endif
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 struct A {};
anatofuz
parents:
diff changeset
25 A a;
anatofuz
parents:
diff changeset
26 const A ca = A();
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 void test1 ()
anatofuz
parents:
diff changeset
29 {
anatofuz
parents:
diff changeset
30 try
anatofuz
parents:
diff changeset
31 {
anatofuz
parents:
diff changeset
32 throw &a;
anatofuz
parents:
diff changeset
33 assert(false);
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35 catch ( const A* )
anatofuz
parents:
diff changeset
36 {
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38 catch ( A *)
anatofuz
parents:
diff changeset
39 {
anatofuz
parents:
diff changeset
40 assert (false);
anatofuz
parents:
diff changeset
41 }
anatofuz
parents:
diff changeset
42 }
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 void test2 ()
anatofuz
parents:
diff changeset
45 {
anatofuz
parents:
diff changeset
46 try
anatofuz
parents:
diff changeset
47 {
anatofuz
parents:
diff changeset
48 throw &a;
anatofuz
parents:
diff changeset
49 assert(false);
anatofuz
parents:
diff changeset
50 }
anatofuz
parents:
diff changeset
51 catch ( A* )
anatofuz
parents:
diff changeset
52 {
anatofuz
parents:
diff changeset
53 }
anatofuz
parents:
diff changeset
54 catch ( const A *)
anatofuz
parents:
diff changeset
55 {
anatofuz
parents:
diff changeset
56 assert (false);
anatofuz
parents:
diff changeset
57 }
anatofuz
parents:
diff changeset
58 }
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 void test3 ()
anatofuz
parents:
diff changeset
61 {
anatofuz
parents:
diff changeset
62 try
anatofuz
parents:
diff changeset
63 {
anatofuz
parents:
diff changeset
64 throw &ca;
anatofuz
parents:
diff changeset
65 assert(false);
anatofuz
parents:
diff changeset
66 }
anatofuz
parents:
diff changeset
67 catch ( const A* )
anatofuz
parents:
diff changeset
68 {
anatofuz
parents:
diff changeset
69 }
anatofuz
parents:
diff changeset
70 catch ( A *)
anatofuz
parents:
diff changeset
71 {
anatofuz
parents:
diff changeset
72 assert (false);
anatofuz
parents:
diff changeset
73 }
anatofuz
parents:
diff changeset
74 }
anatofuz
parents:
diff changeset
75
anatofuz
parents:
diff changeset
76 void test4 ()
anatofuz
parents:
diff changeset
77 {
anatofuz
parents:
diff changeset
78 try
anatofuz
parents:
diff changeset
79 {
anatofuz
parents:
diff changeset
80 throw &ca;
anatofuz
parents:
diff changeset
81 assert(false);
anatofuz
parents:
diff changeset
82 }
anatofuz
parents:
diff changeset
83 catch ( A *)
anatofuz
parents:
diff changeset
84 {
anatofuz
parents:
diff changeset
85 assert (false);
anatofuz
parents:
diff changeset
86 }
anatofuz
parents:
diff changeset
87 catch ( const A* )
anatofuz
parents:
diff changeset
88 {
anatofuz
parents:
diff changeset
89 }
anatofuz
parents:
diff changeset
90 }
anatofuz
parents:
diff changeset
91
anatofuz
parents:
diff changeset
92 struct base1 {int x;};
anatofuz
parents:
diff changeset
93 struct base2 {int x;};
anatofuz
parents:
diff changeset
94 struct derived : base1, base2 {};
anatofuz
parents:
diff changeset
95
anatofuz
parents:
diff changeset
96 void test5 ()
anatofuz
parents:
diff changeset
97 {
anatofuz
parents:
diff changeset
98 try
anatofuz
parents:
diff changeset
99 {
anatofuz
parents:
diff changeset
100 throw (derived*)0;
anatofuz
parents:
diff changeset
101 assert(false);
anatofuz
parents:
diff changeset
102 }
anatofuz
parents:
diff changeset
103 catch (base2 *p) {
anatofuz
parents:
diff changeset
104 assert (p == 0);
anatofuz
parents:
diff changeset
105 }
anatofuz
parents:
diff changeset
106 catch (...)
anatofuz
parents:
diff changeset
107 {
anatofuz
parents:
diff changeset
108 assert (false);
anatofuz
parents:
diff changeset
109 }
anatofuz
parents:
diff changeset
110 }
anatofuz
parents:
diff changeset
111
anatofuz
parents:
diff changeset
112 void test6 ()
anatofuz
parents:
diff changeset
113 {
anatofuz
parents:
diff changeset
114 #if !defined(DISABLE_NULLPTR_TESTS)
anatofuz
parents:
diff changeset
115 try
anatofuz
parents:
diff changeset
116 {
anatofuz
parents:
diff changeset
117 throw nullptr;
anatofuz
parents:
diff changeset
118 assert(false);
anatofuz
parents:
diff changeset
119 }
anatofuz
parents:
diff changeset
120 catch (base2 *p) {
anatofuz
parents:
diff changeset
121 assert (p == nullptr);
anatofuz
parents:
diff changeset
122 }
anatofuz
parents:
diff changeset
123 catch (...)
anatofuz
parents:
diff changeset
124 {
anatofuz
parents:
diff changeset
125 assert (false);
anatofuz
parents:
diff changeset
126 }
anatofuz
parents:
diff changeset
127 #endif
anatofuz
parents:
diff changeset
128 }
anatofuz
parents:
diff changeset
129
anatofuz
parents:
diff changeset
130 void test7 ()
anatofuz
parents:
diff changeset
131 {
anatofuz
parents:
diff changeset
132 try
anatofuz
parents:
diff changeset
133 {
anatofuz
parents:
diff changeset
134 throw (derived*)12;
anatofuz
parents:
diff changeset
135 assert(false);
anatofuz
parents:
diff changeset
136 }
anatofuz
parents:
diff changeset
137 catch (base2 *p) {
anatofuz
parents:
diff changeset
138 assert ((unsigned long)p == 12+sizeof(base1));
anatofuz
parents:
diff changeset
139 }
anatofuz
parents:
diff changeset
140 catch (...)
anatofuz
parents:
diff changeset
141 {
anatofuz
parents:
diff changeset
142 assert (false);
anatofuz
parents:
diff changeset
143 }
anatofuz
parents:
diff changeset
144 }
anatofuz
parents:
diff changeset
145
anatofuz
parents:
diff changeset
146
anatofuz
parents:
diff changeset
147 struct vBase {};
anatofuz
parents:
diff changeset
148 struct vDerived : virtual public vBase {};
anatofuz
parents:
diff changeset
149
anatofuz
parents:
diff changeset
150 void test8 ()
anatofuz
parents:
diff changeset
151 {
anatofuz
parents:
diff changeset
152 vDerived derived;
anatofuz
parents:
diff changeset
153 try
anatofuz
parents:
diff changeset
154 {
anatofuz
parents:
diff changeset
155 throw &derived;
anatofuz
parents:
diff changeset
156 assert(false);
anatofuz
parents:
diff changeset
157 }
anatofuz
parents:
diff changeset
158 catch (vBase *p) {
anatofuz
parents:
diff changeset
159 assert(p != 0);
anatofuz
parents:
diff changeset
160 }
anatofuz
parents:
diff changeset
161 catch (...)
anatofuz
parents:
diff changeset
162 {
anatofuz
parents:
diff changeset
163 assert (false);
anatofuz
parents:
diff changeset
164 }
anatofuz
parents:
diff changeset
165 }
anatofuz
parents:
diff changeset
166
anatofuz
parents:
diff changeset
167 void test9 ()
anatofuz
parents:
diff changeset
168 {
anatofuz
parents:
diff changeset
169 #if !defined(DISABLE_NULLPTR_TESTS)
anatofuz
parents:
diff changeset
170 try
anatofuz
parents:
diff changeset
171 {
anatofuz
parents:
diff changeset
172 throw nullptr;
anatofuz
parents:
diff changeset
173 assert(false);
anatofuz
parents:
diff changeset
174 }
anatofuz
parents:
diff changeset
175 catch (vBase *p) {
anatofuz
parents:
diff changeset
176 assert(p == 0);
anatofuz
parents:
diff changeset
177 }
anatofuz
parents:
diff changeset
178 catch (...)
anatofuz
parents:
diff changeset
179 {
anatofuz
parents:
diff changeset
180 assert (false);
anatofuz
parents:
diff changeset
181 }
anatofuz
parents:
diff changeset
182 #endif
anatofuz
parents:
diff changeset
183 }
anatofuz
parents:
diff changeset
184
anatofuz
parents:
diff changeset
185 void test10 ()
anatofuz
parents:
diff changeset
186 {
anatofuz
parents:
diff changeset
187 try
anatofuz
parents:
diff changeset
188 {
anatofuz
parents:
diff changeset
189 throw (vDerived*)0;
anatofuz
parents:
diff changeset
190 assert(false);
anatofuz
parents:
diff changeset
191 }
anatofuz
parents:
diff changeset
192 catch (vBase *p) {
anatofuz
parents:
diff changeset
193 assert(p == 0);
anatofuz
parents:
diff changeset
194 }
anatofuz
parents:
diff changeset
195 catch (...)
anatofuz
parents:
diff changeset
196 {
anatofuz
parents:
diff changeset
197 assert (false);
anatofuz
parents:
diff changeset
198 }
anatofuz
parents:
diff changeset
199 }
anatofuz
parents:
diff changeset
200
anatofuz
parents:
diff changeset
201 int main()
anatofuz
parents:
diff changeset
202 {
anatofuz
parents:
diff changeset
203 test1();
anatofuz
parents:
diff changeset
204 test2();
anatofuz
parents:
diff changeset
205 test3();
anatofuz
parents:
diff changeset
206 test4();
anatofuz
parents:
diff changeset
207 test5();
anatofuz
parents:
diff changeset
208 test6();
anatofuz
parents:
diff changeset
209 test7();
anatofuz
parents:
diff changeset
210 test8();
anatofuz
parents:
diff changeset
211 test9();
anatofuz
parents:
diff changeset
212 test10();
anatofuz
parents:
diff changeset
213 }