@@ -139,3 +139,138 @@ inline const Immortal *_Nonnull castToImmortal(
139
139
const DerivedFromImmortal *_Nonnull immortal) {
140
140
return static_cast <const Immortal *>(immortal);
141
141
}
142
+
143
+ // A1
144
+ // / \
145
+ // B1 B2
146
+ // / \
147
+ // C1 C2
148
+
149
+ struct IMMORTAL_FRT A1 {
150
+ virtual int virtualMethod () const { return 111 ; }
151
+
152
+ __attribute__ ((swift_name(" swiftFooRename()" )))
153
+ virtual int fooRename () const { return 112 ; }
154
+
155
+ __attribute__ ((swift_name(" swiftBarRename()" )))
156
+ virtual int barRename () const { return 113 ; }
157
+
158
+ __attribute__ ((swift_name(" swiftParamsRename(a1:)" )))
159
+ virtual int paramsRename (int i) const { return i; }
160
+
161
+ static A1 *_Nonnull create () { return new A1 (); }
162
+ };
163
+
164
+ struct B1 : A1 {
165
+ __attribute__ ((swift_name(" swiftVirtualMethod()" )))
166
+ virtual int virtualMethod () const override { return 211 ; }
167
+
168
+ virtual int fooRename () const override { return 212 ; }
169
+
170
+ __attribute__ ((swift_name(" B1BarRename()" )))
171
+ virtual int barRename () const override { return 213 ; }
172
+
173
+ __attribute__ ((swift_name(" swiftParamsRename(b1:)" )))
174
+ virtual int paramsRename (int i) const override { return i; }
175
+
176
+ static B1 *_Nonnull create () { return new B1 (); }
177
+ };
178
+
179
+ struct B2 : A1 {
180
+ int virtualMethod () const { return 221 ; }
181
+
182
+ int fooRename () const { return 222 ; }
183
+
184
+ __attribute__ ((swift_name(" B2BarRename()" ))) int barRename () const {
185
+ return 223 ;
186
+ }
187
+
188
+ static B2 *_Nonnull create () { return new B2 (); }
189
+ };
190
+
191
+ struct C1 : B1 {
192
+ __attribute__ ((swift_name(" swiftFooRename()" )))
193
+ virtual int fooRename () const override { return 312 ; }
194
+
195
+ __attribute__ ((swift_name(" swiftBarRename()" )))
196
+ virtual int barRename () const override { return 313 ; }
197
+
198
+ virtual int paramsRename (int i) const override { return i; }
199
+
200
+ static C1 *_Nonnull create () { return new C1 (); }
201
+ };
202
+
203
+ struct C2 : B1 {
204
+ __attribute__ ((swift_name(" swiftVirtualMethod()" )))
205
+ virtual int virtualMethod () const override { return 321 ; }
206
+
207
+ __attribute__ ((swift_name(" C2FooRename()" )))
208
+ virtual int fooRename () const override { return 322 ; }
209
+
210
+ __attribute__ ((swift_name(" B1BarRename()" )))
211
+ virtual int barRename () const override { return 323 ; }
212
+
213
+ __attribute__ ((swift_name(" swiftParamsRename(b1:)" )))
214
+ virtual int paramsRename (int i) const override { return i; }
215
+
216
+ static C2 *_Nonnull create () { return new C2 (); }
217
+ };
218
+
219
+ struct IMMORTAL_FRT A2 {
220
+ __attribute__ ((swift_name(" swiftVirtualMethod()" )))
221
+ virtual int virtualMethod () const { return 121 ; }
222
+
223
+ __attribute__ ((swift_name(" swiftFooRename()" )))
224
+ virtual int fooRename () const { return 122 ; }
225
+
226
+ __attribute__ ((swift_name(" A2BarRename()" )))
227
+ virtual int barRename () const { return 123 ; }
228
+
229
+ __attribute__ ((swift_name(" swiftParamsRename(a2:)" ))) virtual int
230
+ paramsRename (int i) const {
231
+ return i + 1 ;
232
+ }
233
+
234
+ static A2 *_Nonnull create () { return new A2 (); }
235
+ };
236
+
237
+ // A1 A2
238
+ // \ /
239
+ // D1
240
+
241
+ struct D1 : A1, A2 {
242
+ static D1 *_Nonnull create () { return new D1 (); }
243
+ };
244
+
245
+ // A1 A2
246
+ // \ /
247
+ // B1 /
248
+ // \ /
249
+ // D2
250
+
251
+ struct D2 : B1, A2 {
252
+ __attribute__ ((swift_name(" swiftVirtualMethod()" )))
253
+ virtual int virtualMethod () const override { return 411 ; }
254
+
255
+ virtual int fooRename () const override { return 412 ; }
256
+
257
+ virtual int barRename () const override { return 413 ; }
258
+
259
+ virtual int paramsRename (int i) const override { return i; }
260
+ };
261
+
262
+ // A1
263
+ // / \
264
+ // / \
265
+ // B1 B2
266
+ // |\ /|
267
+ // | \ / |
268
+ // | D3 |
269
+ // C1 |
270
+ // \ |
271
+ // \ /
272
+ // D4
273
+
274
+ struct D3 : B1, B2 {};
275
+
276
+ struct D4 : C1, B2 {};
0 commit comments