annotate libcxxabi/test/catch_member_data_pointer_01.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_member_data_pointer_01.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 struct A
anatofuz
parents:
diff changeset
14 {
anatofuz
parents:
diff changeset
15 A() : i(0), j(0) {} // explicitly initialize 'i' to prevent warnings
anatofuz
parents:
diff changeset
16 const int i;
anatofuz
parents:
diff changeset
17 int j;
anatofuz
parents:
diff changeset
18 };
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 typedef const int A::*md1;
anatofuz
parents:
diff changeset
21 typedef int A::*md2;
anatofuz
parents:
diff changeset
22
anatofuz
parents:
diff changeset
23 struct B : public A
anatofuz
parents:
diff changeset
24 {
anatofuz
parents:
diff changeset
25 B() : k(0), l(0) {} // explicitly initialize 'k' to prevent warnings.
anatofuz
parents:
diff changeset
26 const int k;
anatofuz
parents:
diff changeset
27 int l;
anatofuz
parents:
diff changeset
28 };
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 typedef const int B::*der1;
anatofuz
parents:
diff changeset
31 typedef int B::*der2;
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 void test1()
anatofuz
parents:
diff changeset
34 {
anatofuz
parents:
diff changeset
35 try
anatofuz
parents:
diff changeset
36 {
anatofuz
parents:
diff changeset
37 throw &A::i;
anatofuz
parents:
diff changeset
38 assert(false);
anatofuz
parents:
diff changeset
39 }
anatofuz
parents:
diff changeset
40 catch (md2)
anatofuz
parents:
diff changeset
41 {
anatofuz
parents:
diff changeset
42 assert(false);
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44 catch (md1)
anatofuz
parents:
diff changeset
45 {
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47 }
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 // Check that cv qualified conversions are allowed.
anatofuz
parents:
diff changeset
50 void test2()
anatofuz
parents:
diff changeset
51 {
anatofuz
parents:
diff changeset
52 try
anatofuz
parents:
diff changeset
53 {
anatofuz
parents:
diff changeset
54 throw &A::j;
anatofuz
parents:
diff changeset
55 }
anatofuz
parents:
diff changeset
56 catch (md2)
anatofuz
parents:
diff changeset
57 {
anatofuz
parents:
diff changeset
58 }
anatofuz
parents:
diff changeset
59 catch (...)
anatofuz
parents:
diff changeset
60 {
anatofuz
parents:
diff changeset
61 assert(false);
anatofuz
parents:
diff changeset
62 }
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 try
anatofuz
parents:
diff changeset
65 {
anatofuz
parents:
diff changeset
66 throw &A::j;
anatofuz
parents:
diff changeset
67 assert(false);
anatofuz
parents:
diff changeset
68 }
anatofuz
parents:
diff changeset
69 catch (md1)
anatofuz
parents:
diff changeset
70 {
anatofuz
parents:
diff changeset
71 }
anatofuz
parents:
diff changeset
72 catch (...)
anatofuz
parents:
diff changeset
73 {
anatofuz
parents:
diff changeset
74 assert(false);
anatofuz
parents:
diff changeset
75 }
anatofuz
parents:
diff changeset
76 }
anatofuz
parents:
diff changeset
77
anatofuz
parents:
diff changeset
78 // Check that Base -> Derived conversions are NOT allowed.
anatofuz
parents:
diff changeset
79 void test3()
anatofuz
parents:
diff changeset
80 {
anatofuz
parents:
diff changeset
81 try
anatofuz
parents:
diff changeset
82 {
anatofuz
parents:
diff changeset
83 throw &A::i;
anatofuz
parents:
diff changeset
84 assert(false);
anatofuz
parents:
diff changeset
85 }
anatofuz
parents:
diff changeset
86 catch (md2)
anatofuz
parents:
diff changeset
87 {
anatofuz
parents:
diff changeset
88 assert(false);
anatofuz
parents:
diff changeset
89 }
anatofuz
parents:
diff changeset
90 catch (der2)
anatofuz
parents:
diff changeset
91 {
anatofuz
parents:
diff changeset
92 assert(false);
anatofuz
parents:
diff changeset
93 }
anatofuz
parents:
diff changeset
94 catch (der1)
anatofuz
parents:
diff changeset
95 {
anatofuz
parents:
diff changeset
96 assert(false);
anatofuz
parents:
diff changeset
97 }
anatofuz
parents:
diff changeset
98 catch (md1)
anatofuz
parents:
diff changeset
99 {
anatofuz
parents:
diff changeset
100 }
anatofuz
parents:
diff changeset
101 }
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103 // Check that Base -> Derived conversions NOT are allowed with different cv
anatofuz
parents:
diff changeset
104 // qualifiers.
anatofuz
parents:
diff changeset
105 void test4()
anatofuz
parents:
diff changeset
106 {
anatofuz
parents:
diff changeset
107 try
anatofuz
parents:
diff changeset
108 {
anatofuz
parents:
diff changeset
109 throw &A::j;
anatofuz
parents:
diff changeset
110 assert(false);
anatofuz
parents:
diff changeset
111 }
anatofuz
parents:
diff changeset
112 catch (der2)
anatofuz
parents:
diff changeset
113 {
anatofuz
parents:
diff changeset
114 assert(false);
anatofuz
parents:
diff changeset
115 }
anatofuz
parents:
diff changeset
116 catch (der1)
anatofuz
parents:
diff changeset
117 {
anatofuz
parents:
diff changeset
118 assert(false);
anatofuz
parents:
diff changeset
119 }
anatofuz
parents:
diff changeset
120 catch (md2)
anatofuz
parents:
diff changeset
121 {
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 }
anatofuz
parents:
diff changeset
128
anatofuz
parents:
diff changeset
129 // Check that no Derived -> Base conversions are allowed.
anatofuz
parents:
diff changeset
130 void test5()
anatofuz
parents:
diff changeset
131 {
anatofuz
parents:
diff changeset
132 try
anatofuz
parents:
diff changeset
133 {
anatofuz
parents:
diff changeset
134 throw &B::k;
anatofuz
parents:
diff changeset
135 assert(false);
anatofuz
parents:
diff changeset
136 }
anatofuz
parents:
diff changeset
137 catch (md1)
anatofuz
parents:
diff changeset
138 {
anatofuz
parents:
diff changeset
139 assert(false);
anatofuz
parents:
diff changeset
140 }
anatofuz
parents:
diff changeset
141 catch (md2)
anatofuz
parents:
diff changeset
142 {
anatofuz
parents:
diff changeset
143 assert(false);
anatofuz
parents:
diff changeset
144 }
anatofuz
parents:
diff changeset
145 catch (der1)
anatofuz
parents:
diff changeset
146 {
anatofuz
parents:
diff changeset
147 }
anatofuz
parents:
diff changeset
148
anatofuz
parents:
diff changeset
149 try
anatofuz
parents:
diff changeset
150 {
anatofuz
parents:
diff changeset
151 throw &B::l;
anatofuz
parents:
diff changeset
152 assert(false);
anatofuz
parents:
diff changeset
153 }
anatofuz
parents:
diff changeset
154 catch (md1)
anatofuz
parents:
diff changeset
155 {
anatofuz
parents:
diff changeset
156 assert(false);
anatofuz
parents:
diff changeset
157 }
anatofuz
parents:
diff changeset
158 catch (md2)
anatofuz
parents:
diff changeset
159 {
anatofuz
parents:
diff changeset
160 assert(false);
anatofuz
parents:
diff changeset
161 }
anatofuz
parents:
diff changeset
162 catch (der2)
anatofuz
parents:
diff changeset
163 {
anatofuz
parents:
diff changeset
164 }
anatofuz
parents:
diff changeset
165 }
anatofuz
parents:
diff changeset
166
anatofuz
parents:
diff changeset
167 int main()
anatofuz
parents:
diff changeset
168 {
anatofuz
parents:
diff changeset
169 test1();
anatofuz
parents:
diff changeset
170 test2();
anatofuz
parents:
diff changeset
171 test3();
anatofuz
parents:
diff changeset
172 test4();
anatofuz
parents:
diff changeset
173 test5();
anatofuz
parents:
diff changeset
174 }