1111
1212// REQUIRES: swift_stable_abi
1313
14-
1514// Primary execution of this test. Uses the default minimum inlining version,
16- // which is the version when the ABI became stable .
17- // RUN: %target-typecheck-verify-swift -swift-version 5 -enable-library-evolution -target %target-next-stable-abi-triple -target-min-inlining-version abi
15+ // which is the version when Swift was introduced .
16+ // RUN: %target-typecheck-verify-swift -swift-version 5 -enable-library-evolution -target %target-next-stable-abi-triple -target-min-inlining-version min
1817
1918
2019// Check that these rules are only applied when requested and that at least some
@@ -34,12 +33,12 @@ public struct NoAvailable {
3433 @usableFromInline internal init ( ) { }
3534}
3635
37- @available ( macOS 10 . 14 . 3 , iOS 12 . 1 , tvOS 12 . 1 , watchOS 5 . 1 , * )
36+ @available ( macOS 10 . 9 , iOS 7 . 0 , tvOS 8 . 0 , watchOS 1 . 0 , * )
3837public struct BeforeInliningTarget {
3938 @usableFromInline internal init ( ) { }
4039}
4140
42- @available ( macOS 10 . 14 . 4 , iOS 12 . 2 , tvOS 12 . 2 , watchOS 5 . 2 , * )
41+ @available ( macOS 10 . 10 , iOS 8 . 0 , tvOS 9 . 0 , watchOS 2 . 0 , * )
4342public struct AtInliningTarget {
4443 @usableFromInline internal init ( ) { }
4544}
@@ -90,7 +89,7 @@ public func deployedUseNoAvailable( // expected-note 5 {{add @available attribut
9089 }
9190}
9291
93- @available ( macOS 10 . 14 . 3 , iOS 12 . 1 , tvOS 12 . 1 , watchOS 5 . 1 , * )
92+ @available ( macOS 10 . 9 , iOS 7 . 0 , tvOS 8 . 0 , watchOS 1 . 0 , * )
9493public func deployedUseBeforeInliningTarget(
9594 _: NoAvailable ,
9695 _: BeforeInliningTarget ,
@@ -115,7 +114,7 @@ public func deployedUseBeforeInliningTarget(
115114 }
116115}
117116
118- @available ( macOS 10 . 14 . 4 , iOS 12 . 2 , tvOS 12 . 2 , watchOS 5 . 2 , * )
117+ @available ( macOS 10 . 10 , iOS 8 . 0 , tvOS 9 . 0 , watchOS 2 . 0 , * )
119118public func deployedUseAtInliningTarget(
120119 _: NoAvailable ,
121120 _: BeforeInliningTarget ,
@@ -248,7 +247,7 @@ public func deployedUseAfterDeploymentTarget(
248247 }
249248}
250249
251- @available ( macOS 10 . 14 . 3 , iOS 12 . 1 , tvOS 12 . 1 , watchOS 5 . 1 , * )
250+ @available ( macOS 10 . 9 , iOS 7 . 0 , tvOS 8 . 0 , watchOS 1 . 0 , * )
252251@inlinable public func inlinedUseBeforeInliningTarget(
253252 _: NoAvailable ,
254253 _: BeforeInliningTarget ,
@@ -264,7 +263,7 @@ public func deployedUseAfterDeploymentTarget(
264263 _ = NoAvailable ( )
265264 _ = BeforeInliningTarget ( )
266265 _ = AtInliningTarget ( )
267- _ = BetweenTargets ( ) // expected-error {{'BetweenTargets' is only available in}} {{18-25=10.14.5}} || {{31-35=12.3}} || {{42-46=12.3}} || {{56-59=5.3 }}
266+ _ = BetweenTargets ( ) // expected-error {{'BetweenTargets' is only available in}} expected-note {{add 'if #available' }}
268267 _ = AtDeploymentTarget ( ) // expected-error {{'AtDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
269268 _ = AfterDeploymentTarget ( ) // expected-error {{'AfterDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
270269
@@ -279,7 +278,7 @@ public func deployedUseAfterDeploymentTarget(
279278 }
280279}
281280
282- @available ( macOS 10 . 14 . 4 , iOS 12 . 2 , tvOS 12 . 2 , watchOS 5 . 2 , * )
281+ @available ( macOS 10 . 10 , iOS 8 . 0 , tvOS 9 . 0 , watchOS 2 . 0 , * )
283282@inlinable public func inlinedUseAtInliningTarget(
284283 _: NoAvailable ,
285284 _: BeforeInliningTarget ,
@@ -295,7 +294,7 @@ public func deployedUseAfterDeploymentTarget(
295294 _ = NoAvailable ( )
296295 _ = BeforeInliningTarget ( )
297296 _ = AtInliningTarget ( )
298- _ = BetweenTargets ( ) // expected-error {{'BetweenTargets' is only available in}} {{18-25=10.14.5}} || {{31-35=12.3}} || {{42-46=12.3}} || {{56-59=5.3 }}
297+ _ = BetweenTargets ( ) // expected-error {{'BetweenTargets' is only available in}} expected-note {{add 'if #available' }}
299298 _ = AtDeploymentTarget ( ) // expected-error {{'AtDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
300299 _ = AfterDeploymentTarget ( ) // expected-error {{'AfterDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
301300
@@ -426,6 +425,40 @@ internal func fn() {
426425 }
427426}
428427
428+ // @_backDeploy acts like @inlinable.
429+
430+ @available ( macOS 10 . 10 , iOS 8 . 0 , tvOS 9 . 0 , watchOS 2 . 0 , * )
431+ @_backDeploy ( macOS 999 . 0 , iOS 999 . 0 , tvOS 999 . 0 , watchOS 999 . 0 )
432+ public func backDeployedToInliningTarget(
433+ _: NoAvailable ,
434+ _: BeforeInliningTarget ,
435+ _: AtInliningTarget ,
436+ _: BetweenTargets , // expected-error {{'BetweenTargets' is only available in}}
437+ _: AtDeploymentTarget , // expected-error {{'AtDeploymentTarget' is only available in}}
438+ _: AfterDeploymentTarget // expected-error {{'AfterDeploymentTarget' is only available in}}
439+ ) {
440+ defer {
441+ _ = AtDeploymentTarget ( ) // expected-error {{'AtDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
442+ _ = AfterDeploymentTarget ( ) // expected-error {{'AfterDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
443+ }
444+ _ = NoAvailable ( )
445+ _ = BeforeInliningTarget ( )
446+ _ = AtInliningTarget ( )
447+ _ = BetweenTargets ( ) // expected-error {{'BetweenTargets' is only available in}} expected-note {{add 'if #available'}}
448+ _ = AtDeploymentTarget ( ) // expected-error {{'AtDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
449+ _ = AfterDeploymentTarget ( ) // expected-error {{'AfterDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
450+
451+ if #available( macOS 10 . 14 . 5 , iOS 12 . 3 , tvOS 12 . 3 , watchOS 5 . 3 , * ) {
452+ _ = BetweenTargets ( )
453+ }
454+ if #available( macOS 10 . 15 , iOS 13 , tvOS 13 , watchOS 6 , * ) {
455+ _ = AtDeploymentTarget ( )
456+ }
457+ if #available( macOS 11 , iOS 14 , tvOS 14 , watchOS 7 , * ) {
458+ _ = AfterDeploymentTarget ( )
459+ }
460+ }
461+
429462// Default arguments act like @inlinable.
430463
431464public func defaultArgsUseNoAvailable( // expected-note 3 {{add @available attribute}}
0 commit comments