1
-
2
1
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -module-name objc_bridging_any -Xllvm -sil-print-debuginfo -emit-silgen -enable-sil-ownership %s | %FileCheck %s
3
2
// REQUIRES: objc_interop
4
3
@@ -414,7 +413,7 @@ protocol Anyable {
414
413
// Make sure we generate correct bridging thunks
415
414
class SwiftIdLover : NSObject , Anyable {
416
415
417
- func methodReturningAny( ) -> Any { }
416
+ func methodReturningAny( ) -> Any { fatalError ( ) }
418
417
// SEMANTIC ARC TODO: This is another case of pattern matching the body of one
419
418
// function in a different function... Just pattern match the unreachable case
420
419
// to preserve behavior. We should check if it is correct.
@@ -440,31 +439,19 @@ class SwiftIdLover : NSObject, Anyable {
440
439
// CHECK: return [[OBJC_RESULT]]
441
440
// CHECK: } // end sil function '$S17objc_bridging_any12SwiftIdLoverC18methodReturningAnyypyFTo'
442
441
443
- func methodReturningOptionalAny( ) -> Any ? { }
442
+ func methodReturningOptionalAny( ) -> Any ? { fatalError ( ) }
444
443
// CHECK-LABEL: sil hidden @$S17objc_bridging_any12SwiftIdLoverC26methodReturningOptionalAnyypSgyF
445
444
// CHECK-LABEL: sil hidden [thunk] @$S17objc_bridging_any12SwiftIdLoverC26methodReturningOptionalAnyypSgyFTo
446
445
// CHECK: function_ref @$Ss27_bridgeAnythingToObjectiveC{{.*}}F
447
446
448
- @objc func methodTakingAny( a: Any ) { }
447
+ @objc func methodTakingAny( a: Any ) { fatalError ( ) }
449
448
// CHECK-LABEL: sil hidden [thunk] @$S17objc_bridging_any12SwiftIdLoverC15methodTakingAny1ayyp_tFTo : $@convention(objc_method) (AnyObject, SwiftIdLover) -> ()
450
449
// CHECK: bb0([[ARG:%.*]] : @unowned $AnyObject, [[SELF:%.*]] : @unowned $SwiftIdLover):
451
- // CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[ARG]]
452
- // CHECK-NEXT: [[SELF_COPY:%.*]] = copy_value [[SELF]]
453
- // CHECK-NEXT: [[OPENED_SELF:%.*]] = open_existential_ref [[ARG_COPY]]
454
- // CHECK-NEXT: [[RESULT:%.*]] = alloc_stack $Any
455
- // CHECK-NEXT: [[INIT:%.*]] = init_existential_addr [[RESULT]] : $*Any
456
- // CHECK-NEXT: store [[OPENED_SELF]] to [init] [[INIT]]
457
- // CHECK-NEXT: [[BORROWED_SELF_COPY:%.*]] = begin_borrow [[SELF_COPY]]
458
- // CHECK-NEXT: // function_ref
459
- // CHECK-NEXT: [[METHOD:%.*]] = function_ref @$S17objc_bridging_any12SwiftIdLoverC15methodTakingAny1ayyp_tF
460
- // CHECK-NEXT: apply [[METHOD]]([[RESULT]], [[BORROWED_SELF_COPY]])
461
- // CHECK-NEXT: end_borrow [[BORROWED_SELF_COPY]] from [[SELF_COPY]]
462
- // CHECK-NEXT: destroy_addr [[RESULT]]
463
- // CHECK-NEXT: dealloc_stack [[RESULT]]
464
- // CHECK-NEXT: destroy_value [[SELF_COPY]]
465
- // CHECK-NEXT: return
450
+ // CHECK: function_ref [[BRIDGE_ANYOBJECT_TO_ANY:@\$Ss018_bridgeAnyObjectToB0yypyXlSgF]] : $@convention(thin) (@guaranteed Optional<AnyObject>) -> @out Any
451
+ // CHECK: [[METHOD:%.*]] = function_ref @$S17objc_bridging_any12SwiftIdLoverC15methodTakingAny1ayyp_tF
452
+ // CHECK-NEXT: apply [[METHOD]]([[RESULT:%.*]], [[BORROWED_SELF_COPY:%.*]]) :
466
453
467
- func methodTakingOptionalAny( a: Any ? ) { }
454
+ func methodTakingOptionalAny( a: Any ? ) { fatalError ( ) }
468
455
// CHECK-LABEL: sil hidden @$S17objc_bridging_any12SwiftIdLoverC23methodTakingOptionalAny1ayypSg_tF
469
456
470
457
// CHECK-LABEL: sil hidden [thunk] @$S17objc_bridging_any12SwiftIdLoverC23methodTakingOptionalAny1ayypSg_tFTo
@@ -502,7 +489,7 @@ class SwiftIdLover : NSObject, Anyable {
502
489
// CHECK-NEXT: dealloc_stack [[TMP]]
503
490
// CHECK-NEXT: return [[VOID]]
504
491
505
- @objc func methodTakingBlockTakingAny( _: ( Any ) -> ( ) ) { }
492
+ @objc func methodTakingBlockTakingAny( _: ( Any ) -> ( ) ) { fatalError ( ) }
506
493
507
494
// CHECK-LABEL: sil hidden @$S17objc_bridging_any12SwiftIdLoverC29methodReturningBlockTakingAnyyypcyF : $@convention(method) (@guaranteed SwiftIdLover) -> @owned @callee_guaranteed (@in_guaranteed Any) -> ()
508
495
@@ -543,9 +530,9 @@ class SwiftIdLover : NSObject, Anyable {
543
530
// CHECK-NEXT: destroy_value [[FUNCTION]]
544
531
// CHECK-NEXT: return [[VOID]] : $()
545
532
546
- @objc func methodTakingBlockTakingOptionalAny( _: ( Any ? ) -> ( ) ) { }
533
+ @objc func methodTakingBlockTakingOptionalAny( _: ( Any ? ) -> ( ) ) { fatalError ( ) }
547
534
548
- @objc func methodReturningBlockTakingAny( ) -> ( ( Any ) -> ( ) ) { }
535
+ @objc func methodReturningBlockTakingAny( ) -> ( ( Any ) -> ( ) ) { fatalError ( ) }
549
536
550
537
// CHECK-LABEL: sil hidden @$S17objc_bridging_any12SwiftIdLoverC29methodTakingBlockReturningAnyyyypyXEF : $@convention(method) (@noescape @callee_guaranteed () -> @out Any, @guaranteed SwiftIdLover) -> () {
551
538
@@ -579,9 +566,9 @@ class SwiftIdLover : NSObject, Anyable {
579
566
// CHECK-NEXT: destroy_value [[OPTIONAL]]
580
567
// CHECK-NEXT: return [[EMPTY]]
581
568
582
- @objc func methodReturningBlockTakingOptionalAny( ) -> ( ( Any ? ) -> ( ) ) { }
569
+ @objc func methodReturningBlockTakingOptionalAny( ) -> ( ( Any ? ) -> ( ) ) { fatalError ( ) }
583
570
584
- @objc func methodTakingBlockReturningAny( _: ( ) -> Any ) { }
571
+ @objc func methodTakingBlockReturningAny( _: ( ) -> Any ) { fatalError ( ) }
585
572
586
573
// CHECK-LABEL: sil hidden @$S17objc_bridging_any12SwiftIdLoverC020methodReturningBlockH3AnyypycyF : $@convention(method) (@guaranteed SwiftIdLover) -> @owned @callee_guaranteed () -> @out Any
587
574
@@ -626,26 +613,26 @@ class SwiftIdLover : NSObject, Anyable {
626
613
// CHECK-NEXT: destroy_value [[FUNCTION]]
627
614
// CHECK-NEXT: return [[BRIDGED]]
628
615
629
- @objc func methodTakingBlockReturningOptionalAny( _: ( ) -> Any ? ) { }
616
+ @objc func methodTakingBlockReturningOptionalAny( _: ( ) -> Any ? ) { fatalError ( ) }
630
617
631
- @objc func methodReturningBlockReturningAny( ) -> ( ( ) -> Any ) { }
618
+ @objc func methodReturningBlockReturningAny( ) -> ( ( ) -> Any ) { fatalError ( ) }
632
619
633
- @objc func methodReturningBlockReturningOptionalAny( ) -> ( ( ) -> Any ? ) { }
620
+ @objc func methodReturningBlockReturningOptionalAny( ) -> ( ( ) -> Any ? ) { fatalError ( ) }
634
621
// CHECK-LABEL: sil shared [transparent] [serializable] [reabstraction_thunk] @$SypSgIegr_yXlSgIeyBa_TR
635
622
// CHECK: function_ref @$Ss27_bridgeAnythingToObjectiveC{{.*}}F
636
623
637
- override init ( ) { super . init ( ) }
638
- @objc dynamic required convenience init ( any: Any ) { self . init ( ) }
639
- @objc dynamic required convenience init ( anyMaybe: Any ? ) { self . init ( ) }
624
+ override init ( ) { fatalError ( ) }
625
+ @objc dynamic required convenience init ( any: Any ) { fatalError ( ) }
626
+ @objc dynamic required convenience init ( anyMaybe: Any ? ) { fatalError ( ) }
640
627
@objc dynamic var anyProperty : Any
641
628
@objc dynamic var maybeAnyProperty : Any ?
642
629
643
- subscript( _: IndexForAnySubscript ) -> Any { get { } set { } }
630
+ subscript( _: IndexForAnySubscript ) -> Any { get { fatalError ( ) } set { fatalError ( ) } }
644
631
645
- @objc func methodReturningAnyOrError( ) throws -> Any { }
632
+ @objc func methodReturningAnyOrError( ) throws -> Any { fatalError ( ) }
646
633
}
647
634
648
- class IndexForAnySubscript { }
635
+ class IndexForAnySubscript { }
649
636
650
637
func dynamicLookup( x: AnyObject ) {
651
638
_ = x. anyProperty
@@ -685,6 +672,28 @@ func bridgeOptionalFunctionToAnyObject(fn: (() -> ())?) -> AnyObject {
685
672
return fn as AnyObject
686
673
}
687
674
675
+ // When bridging `id _Nonnull` values incoming from unknown ObjC code,
676
+ // turn them into `Any` using a runtime call that defends against the
677
+ // possibility they still may be nil.
678
+
679
+ // CHECK-LABEL: sil hidden @$S17objc_bridging_any22bridgeIncomingAnyValueyypSo9NSIdLoverCF
680
+ func bridgeIncomingAnyValue( _ receiver: NSIdLover ) -> Any {
681
+ // CHECK: function_ref [[BRIDGE_ANYOBJECT_TO_ANY]]
682
+ return receiver. makesId ( )
683
+ }
684
+
685
+ class SwiftAnyEnjoyer : NSIdLover , NSIdLoving {
686
+ // CHECK-LABEL: sil hidden [thunk] @$S17objc_bridging_any15SwiftAnyEnjoyerC7takesIdyyypFTo
687
+ // CHECK: function_ref [[BRIDGE_ANYOBJECT_TO_ANY]]
688
+ override func takesId( _ x: Any ) { }
689
+
690
+ // CHECK-LABEL: sil hidden [thunk] @$S17objc_bridging_any15SwiftAnyEnjoyerC7takesId11viaProtocolyyp_tFTo
691
+ // CHECK: function_ref [[BRIDGE_ANYOBJECT_TO_ANY]]
692
+ func takesId( viaProtocol x: Any ) { }
693
+ }
694
+
695
+
696
+
688
697
// CHECK-LABEL: sil_witness_table shared [serialized] GenericOption: Hashable module objc_generics {
689
698
// CHECK-NEXT: base_protocol Equatable: GenericOption: Equatable module objc_generics
690
699
// CHECK-NEXT: method #Hashable.hashValue!getter.1: {{.*}} : @$SSo13GenericOptionas8HashableSCsACP9hashValueSivgTW
0 commit comments