11// RUN: %empty-directory(%t)
2- // RUN: %target-swift-frontend -emit-module -emit-module-path %t/weak_import_availability_helper.swiftmodule -parse-as-library %S/Inputs/weak_import_availability_helper.swift -enable-library-evolution
2+ // RUN: %target-swift-frontend -target %target-cpu-apple-macosx10.50 - emit-module -emit-module-path %t/weak_import_availability_helper.swiftmodule -parse-as-library %S/Inputs/weak_import_availability_helper.swift -enable-library-evolution
33//
4- // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefix= CHECK-OLD
5- // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 | %FileCheck %s --check-prefix= CHECK-NEW
6- // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 | %FileCheck %s --check-prefix= CHECK-NEW
4+ // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir | %FileCheck %s --check-prefixes=CHECK, CHECK-OLD
5+ // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 | %FileCheck %s --check-prefixes=CHECK, CHECK-NEW
6+ // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 | %FileCheck %s --check-prefixes=CHECK, CHECK-NEW
77
8- // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 -weak-link-at-target | %FileCheck %s --check-prefix= CHECK-OLD
9- // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target | %FileCheck %s --check-prefix= CHECK-NEW
8+ // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.50 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK, CHECK-OLD
9+ // RUN: %target-swift-frontend -primary-file %s -I %t -emit-ir -target %target-cpu-apple-macosx10.60 -weak-link-at-target | %FileCheck %s --check-prefixes=CHECK, CHECK-NEW
1010
1111// REQUIRES: OS=macosx
1212
@@ -35,6 +35,16 @@ public func useConditionallyAvailableConformance() {
3535// CHECK-OLD-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = extern_weak global i8*
3636// CHECK-NEW-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA0eF8ProtocolAAWP" = external global i8*
3737
38+ @available ( macOS, unavailable)
39+ func useUnavailableConformance< T : UnavailableProtocol > ( _: T . Type ) { }
40+
41+ @available ( macOS, unavailable)
42+ public func useUnavailableConformance( ) {
43+ useUnavailableConformance ( AlwaysAvailableStruct . self)
44+ }
45+
46+ // CHECK-LABEL: @"$s31weak_import_availability_helper21AlwaysAvailableStructVAA19UnavailableProtocolAAWP" = extern_weak global i8*, align 8
47+
3848@available ( macOS 10 . 50 , * )
3949public func callConditionallyAvailableFunction( ) {
4050 conditionallyAvailableFunction ( )
@@ -43,6 +53,21 @@ public func callConditionallyAvailableFunction() {
4353// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper30conditionallyAvailableFunctionyyF"()
4454// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper30conditionallyAvailableFunctionyyF"()
4555
56+ @available ( macOS, unavailable)
57+ public func callUnavailableFunction( ) {
58+ unavailableFunction ( )
59+ }
60+
61+ // CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper19unavailableFunctionyyF"()
62+
63+ @available ( macOS, unavailable)
64+ public func callUnavailableButIntroducedFunction( ) {
65+ unavailableButIntroducedFunction ( )
66+ }
67+
68+ // CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper32unavailableButIntroducedFunctionyyF"()
69+ // CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper32unavailableButIntroducedFunctionyyF"()
70+
4671@available ( macOS 10 . 50 , * )
4772public func useConditionallyAvailableGlobal( ) {
4873 _ = conditionallyAvailableGlobal
@@ -56,17 +81,56 @@ public func useConditionallyAvailableGlobal() {
5681// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivs"(i64)
5782// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivs"(i64)
5883
84+ // CHECK-OLD-LABEL: declare extern_weak swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(i8* noalias dereferenceable(32))
85+ // CHECK-NEW-LABEL: declare swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper28conditionallyAvailableGlobalSivM"(i8* noalias dereferenceable(32))
86+
87+ @available ( macOS, unavailable)
88+ public func useUnavailableGlobal( ) {
89+ _ = unavailableGlobal
90+ unavailableGlobal = 0
91+ unavailableGlobal += 1
92+ }
93+
94+ // CHECK-LABEL: declare extern_weak swiftcc i64 @"$s31weak_import_availability_helper17unavailableGlobalSivg"()
95+ // CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper17unavailableGlobalSivs"(i64)
96+ // CHECK-LABEL: declare extern_weak swiftcc { i8*, %TSi* } @"$s31weak_import_availability_helper17unavailableGlobalSivM"(i8* noalias dereferenceable(32))
97+
5998func blackHole< T> ( _: T ) { }
6099
61100@available ( macOS 10 . 50 , * )
62101public func useConditionallyAvailableStruct( ) {
63102 blackHole ( ConditionallyAvailableStruct . self)
64103}
65104
105+ // CHECK-OLD-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructVMa"(i64)
106+ // CHECK-NEW-LABEL: declare swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructVMa"(i64)
107+
108+ @available ( macOS 10 . 50 , * )
109+ public func useNestedConditionallyAvailableStruct( ) {
110+ blackHole ( ConditionallyAvailableStruct . NestedStruct. self)
111+ }
112+
113+ // CHECK-OLD-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructV06NestedG0VMa"(i64)
114+ // CHECK-NEW-LABEL: declare swiftcc %swift.metadata_response @"$s31weak_import_availability_helper28ConditionallyAvailableStructV06NestedG0VMa"(i64)
115+
66116@available ( macOS 10 . 50 , * )
67117public func useConditionallyAvailableMethod( s: ConditionallyAvailableStruct ) {
68118 s. conditionallyAvailableMethod ( )
69119}
70120
71121// CHECK-OLD-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(%swift.opaque* noalias nocapture swiftself)
72122// CHECK-NEW-LABEL: declare swiftcc void @"$s31weak_import_availability_helper28ConditionallyAvailableStructV013conditionallyF6MethodyyF"(%swift.opaque* noalias nocapture swiftself)
123+
124+ @available ( macOS, unavailable)
125+ public func useUnavailableStruct( ) {
126+ blackHole ( UnvailableStruct . self)
127+ }
128+
129+ // CHECK-LABEL: declare extern_weak swiftcc %swift.metadata_response @"$s31weak_import_availability_helper16UnvailableStructVMa"(i64)
130+
131+ @available ( macOS, unavailable)
132+ public func useUnavailableMethod( s: UnvailableStruct ) {
133+ s. unavailableMethod ( )
134+ }
135+
136+ // CHECK-LABEL: declare extern_weak swiftcc void @"$s31weak_import_availability_helper16UnvailableStructV17unavailableMethodyyF"(%swift.opaque* noalias nocapture swiftself)
0 commit comments