@@ -271,3 +271,80 @@ class ClassWithLoadableStructWithBiggerString {
271
271
return LoadableStructWithBiggerString ( a1: BiggerString ( str: " " , double: 0.0 ) , a2: [ ] , a3: [ ] )
272
272
}
273
273
}
274
+
275
+ //===----------------------------------------------------------------------===//
276
+ // SR-8076
277
+ //===----------------------------------------------------------------------===//
278
+ public typealias sr8076_Filter = ( BigStruct ) -> Bool
279
+
280
+ public protocol sr8076_Query {
281
+ associatedtype Returned
282
+ }
283
+
284
+ public protocol sr8076_ProtoQueryHandler {
285
+ func forceHandle_1< Q: sr8076_Query > ( query: Q ) -> Void
286
+ func forceHandle_2< Q: sr8076_Query > ( query: Q ) -> ( Q . Returned , BigStruct ? )
287
+ func forceHandle_3< Q: sr8076_Query > ( query: Q ) -> ( Q . Returned , sr8076_Filter ? )
288
+ func forceHandle_4< Q: sr8076_Query > ( query: Q ) throws -> ( Q . Returned , sr8076_Filter ? )
289
+ }
290
+
291
+ public protocol sr8076_QueryHandler : sr8076_ProtoQueryHandler {
292
+ associatedtype Handled : sr8076_Query
293
+ func handle_1( query: Handled ) -> Void
294
+ func handle_2( query: Handled ) -> ( Handled . Returned , BigStruct ? )
295
+ func handle_3( query: Handled ) -> ( Handled . Returned , sr8076_Filter ? )
296
+ func handle_4( query: Handled ) throws -> ( Handled . Returned , sr8076_Filter ? )
297
+ }
298
+
299
+
300
+ public extension sr8076_QueryHandler {
301
+
302
+ // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_15queryyqd___tAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
303
+ // CHECK: call swiftcc void {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
304
+ // CHECK: ret void
305
+ func forceHandle_1< Q: sr8076_Query > ( query: Q ) -> Void {
306
+ guard let body = handle_1 as? ( Q ) -> Void else {
307
+ fatalError ( " handler \( self ) is expected to handle query \( query) " )
308
+ }
309
+ body ( query)
310
+ }
311
+
312
+ // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_25query8ReturnedQyd___AA9BigStructVSgtqd___tAA0e1_F0Rd__lF"(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret, %swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
313
+ // CHECK: [[ALLOC:%.*]] = alloca %T22big_types_corner_cases9BigStructVSg
314
+ // CHECK: call swiftcc void {{.*}}(%T22big_types_corner_cases9BigStructVSg* noalias nocapture sret [[ALLOC]], %swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
315
+ // CHECK: ret void
316
+ func forceHandle_2< Q: sr8076_Query > ( query: Q ) -> ( Q . Returned , BigStruct ? ) {
317
+ guard let body = handle_2 as? ( Q ) -> ( Q . Returned , BigStruct ? ) else {
318
+ fatalError ( " handler \( self ) is expected to handle query \( query) " )
319
+ }
320
+ return body ( query)
321
+ }
322
+
323
+ // CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
324
+ // CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
325
+ // CHECK-64: ret { i64, i64 }
326
+
327
+ // CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_35query8ReturnedQyd___SbAA9BigStructVcSgtqd___tAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself)
328
+ // CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}})
329
+ // CHECK-32: ret { i32, i32 }
330
+ func forceHandle_3< Q: sr8076_Query > ( query: Q ) -> ( Q . Returned , sr8076_Filter ? ) {
331
+ guard let body = handle_3 as? ( Q ) -> ( Q . Returned , sr8076_Filter ? ) else {
332
+ fatalError ( " handler \( self ) is expected to handle query \( query) " )
333
+ }
334
+ return body ( query)
335
+ }
336
+
337
+ // CHECK-LABEL-64: define{{( dllexport)?}}{{( protected)?}} swiftcc { i64, i64 } @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself, %swift.error** swifterror)
338
+ // CHECK-64: {{.*}} = call swiftcc { i64, i64 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}, %swift.error** nocapture swifterror {{.*}})
339
+ // CHECK-64: ret { i64, i64 }
340
+
341
+ // CHECK-LABEL-32: define{{( dllexport)?}}{{( protected)?}} swiftcc { i32, i32} @"$S22big_types_corner_cases19sr8076_QueryHandlerPAAE13forceHandle_45query8ReturnedQyd___SbAA9BigStructVcSgtqd___tKAA0e1_F0Rd__lF"(%swift.opaque* noalias nocapture, %swift.opaque* noalias nocapture, %swift.type*{{.*}}, %swift.type*{{.*}}, i8** {{.*}}.sr8076_QueryHandler, i8** {{.*}}.sr8076_Query, %swift.opaque* noalias nocapture swiftself, %swift.error** swifterror)
342
+ // CHECK-32: {{.*}} = call swiftcc { i32, i32 } {{.*}}(%swift.opaque* noalias nocapture {{.*}}, %swift.opaque* noalias nocapture {{.*}}, %swift.refcounted* swiftself {{.*}}, %swift.error** nocapture {{.*}})
343
+ // CHECK-32: ret { i32, i32 }
344
+ func forceHandle_4< Q: sr8076_Query > ( query: Q ) throws -> ( Q . Returned , sr8076_Filter ? ) {
345
+ guard let body = handle_4 as? ( Q ) throws -> ( Q . Returned , sr8076_Filter ? ) else {
346
+ fatalError ( " handler \( self ) is expected to handle query \( query) " )
347
+ }
348
+ return try body ( query)
349
+ }
350
+ }
0 commit comments