1
- // RUN: %target-swift-frontend -enable-sil-opaque-values -emit-sorted-sil -Xllvm -sil-full-demangle -emit-silgen %s | %FileCheck %s
1
+ // RUN: %target-swift-frontend -enable-sil-opaque-values -emit-sorted-sil -Xllvm -sil-full-demangle -emit-silgen %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime
2
2
3
3
// UNSUPPORTED: resilient_stdlib
4
4
@@ -721,7 +721,7 @@ func s340_______captureBox() {
721
721
var mutableAddressOnly : EmptyP = AddressOnlyStruct ( )
722
722
723
723
func captureEverything( ) {
724
- s100_________identity ( ( mutableAddressOnly) )
724
+ _ = s100_________identity ( ( mutableAddressOnly) )
725
725
}
726
726
727
727
captureEverything ( )
@@ -790,6 +790,7 @@ func s350_______addrOnlyIf(x: Bool) -> EmptyP {
790
790
func s360________guardEnum< T> ( _ e: IndirectEnum < T > ) {
791
791
do {
792
792
guard case . Node( let x) = e else { return }
793
+ _ = x
793
794
}
794
795
}
795
796
@@ -819,6 +820,7 @@ func s370_____optToOptCast<T>(_ x : T!) -> T? {
819
820
// CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s380___contextualInitySiSgF'
820
821
func s380___contextualInit( _ a : Int ? ) {
821
822
var x : Int ! = a
823
+ _ = x
822
824
}
823
825
824
826
// Tests opaque call result types
@@ -842,6 +844,7 @@ func s380___contextualInit(_ a : Int?) {
842
844
// CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s390___addrCallResultyxycSglF'
843
845
func s390___addrCallResult< T> ( _ f: ( ( ) -> T ) ? ) {
844
846
var x = f ? ( )
847
+ _ = x
845
848
}
846
849
847
850
// Tests reabstraction / partial apply of protocols under opaque value mode
@@ -956,6 +959,50 @@ func s440__cleanupEmission<T>(_ x: T) {
956
959
_ = x2
957
960
}
958
961
962
+ // Test SILGenBuilder.loadCopy().
963
+ // ---
964
+ // CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s450__________lastValxSayxGd_tlF : $@convention(thin) <T> (@owned Array<T>) -> @out T
965
+ // CHECK: [[LOAD:%.*]] = load [copy] %34 : $*T
966
+ // CHECK: return [[LOAD]] : $T
967
+ // CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s450__________lastValxSayxGd_tlF'
968
+ func s450__________lastVal< T> ( _ rest: T ... ) -> T {
969
+ var minValue : T
970
+ for value in rest {
971
+ minValue = value
972
+ }
973
+ return minValue
974
+ }
975
+
976
+ // Test SILGenFunction::emitPointerToPointer.
977
+ // ---
978
+ // CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s460______________fooSRyxGSPyxG1p_tlF : $@convention(thin) <Element> (UnsafePointer<Element>) -> UnsafeBufferPointer<Element> {
979
+ // CHECK: [[F:%.*]] = function_ref @_T0s017_convertPointerToB8Argumentq_xs01_B0RzsABR_r0_lF : $@convention(thin) <τ_0_0, τ_0_1 where τ_0_0 : _Pointer, τ_0_1 : _Pointer> (@in τ_0_0) -> @out τ_0_1
980
+ // CHECK: apply [[F]]<UnsafePointer<Element>, UnsafePointer<Element>>(%0) : $@convention(thin) <τ_0_0, τ_0_1 where τ_0_0 : _Pointer, τ_0_1 : _Pointer> (@in τ_0_0) -> @out τ_0_1
981
+ // CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s460______________fooSRyxGSPyxG1p_tlF'
982
+ func s460______________foo< Element> ( p: UnsafePointer < Element > ) -> UnsafeBufferPointer < Element > {
983
+ return UnsafeBufferPointer ( start: p, count: 1 )
984
+ }
985
+
986
+ // Test emitNativeToCBridgedNonoptionalValue
987
+ // ---
988
+ // CHECK-objc-LABEL: sil hidden @_T020opaque_values_silgen21s470________nativeToCyXlyp7fromAny_tF : $@convention(thin) (@in Any) -> @owned AnyObject {
989
+ // CHECK-objc bb0(%0 : $Any):
990
+ // CHECK-objc [[BORROW:%.*]] = begin_borrow %0 : $Any
991
+ // CHECK-objc [[SRC:%.*]] = copy_value [[BORROW]] : $Any
992
+ // CHECK-objc [[OPEN:%.*]] = open_existential_opaque [[SRC]] : $Any to $@opened
993
+ // CHECK-objc [[COPY:%.*]] = copy_value [[OPEN]] : $@opened
994
+ // CHECK-objc [[F:%.*]] = function_ref @_T0s27_bridgeAnythingToObjectiveCyXlxlF : $@convention(thin) <τ_0_0> (@in τ_0_0) -> @owned AnyObject
995
+ // CHECK-objc [[RET:%.*]] = apply [[F]]<@opened("{{.*}}") Any>([[COPY]]) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> @owned AnyObject
996
+ // CHECK-objc destroy_value [[SRC]] : $Any
997
+ // CHECK-objc destroy_value %0 : $Any
998
+ // CHECK-objc return [[RET]] : $AnyObject
999
+ // CHECK-objc-LABEL: } // end sil function '_T020opaque_values_silgen21s470________nativeToCyXlyp7fromAny_tF'
1000
+ #if _runtime(_ObjC)
1001
+ func s470________nativeToC( fromAny any: Any ) -> AnyObject {
1002
+ return any as AnyObject
1003
+ }
1004
+ #endif
1005
+
959
1006
// Tests conditional value casts and correspondingly generated reabstraction thunk, with <T> types
960
1007
// ---
961
1008
// CHECK-LABEL: sil hidden @_T020opaque_values_silgen21s999_____condTFromAnyyyp_xtlF : $@convention(thin) <T> (@in Any, @in T) -> () {
@@ -971,7 +1018,7 @@ func s440__cleanupEmission<T>(_ x: T) {
971
1018
// CHECK-LABEL: } // end sil function '_T020opaque_values_silgen21s999_____condTFromAnyyyp_xtlF'
972
1019
func s999_____condTFromAny< T> ( _ x: Any , _ y: T ) {
973
1020
if let f = x as? ( Int , T ) -> ( Int , T ) {
974
- f ( 42 , y)
1021
+ _ = f ( 42 , y)
975
1022
}
976
1023
}
977
1024
0 commit comments