1- // RUN: %target-swift-frontend -typecheck -dump-type-refinement-contexts %s > %t.dump 2>&1
1+ // RUN: %target-swift-frontend -typecheck -dump-type-refinement-contexts -target %target-cpu-apple-macosx10.50 %s > %t.dump 2>&1
22// RUN: %FileCheck --strict-whitespace %s < %t.dump
33
44// REQUIRES: OS=macosx
55
6- // CHECK: {{^}}(root versions=[10.{{[0-9]+}} .0,+Inf)
6+ // CHECK: {{^}}(root versions=[10.50 .0,+Inf) explicit=all
77
8- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=SomeClass
9- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someMethod()
10- // CHECK-NEXT: {{^}} (decl versions=[10.53,+Inf) decl=someInnerFunc()
11- // CHECK-NEXT: {{^}} (decl versions=[10.53,+Inf) decl=InnerClass
12- // CHECK-NEXT: {{^}} (decl versions=[10.54,+Inf) decl=innerClassMethod
13- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someStaticProperty
14- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someComputedProperty
15- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someOtherMethod()
8+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=SomeClass
9+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=someMethod()
10+ // CHECK-NEXT: {{^}} (decl versions=[10.53,+Inf) explicit=[10.53,+Inf) decl=someInnerFunc()
11+ // CHECK-NEXT: {{^}} (decl versions=[10.53,+Inf) explicit=[10.53,+Inf) decl=InnerClass
12+ // CHECK-NEXT: {{^}} (decl versions=[10.54,+Inf) explicit=[10.54,+Inf) decl=innerClassMethod
13+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=someStaticProperty
14+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=someComputedProperty
15+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=someOtherMethod()
1616@available ( OSX 10 . 51 , * )
1717class SomeClass {
1818 @available ( OSX 10 . 52 , * )
@@ -43,13 +43,13 @@ class SomeClass {
4343 func someOtherMethod( ) { }
4444}
4545
46- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=someFunction()
46+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=someFunction()
4747@available ( OSX 10 . 51 , * )
4848func someFunction( ) { }
4949
50- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=SomeProtocol
51- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=protoMethod()
52- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=protoProperty
50+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=SomeProtocol
51+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=protoMethod()
52+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=protoProperty
5353@available ( OSX 10 . 51 , * )
5454protocol SomeProtocol {
5555 @available ( OSX 10 . 52 , * )
@@ -59,26 +59,26 @@ protocol SomeProtocol {
5959 var protoProperty : Int { get }
6060}
6161
62- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=extension.SomeClass
63- // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someExtensionFunction()
62+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=extension.SomeClass
63+ // CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) explicit=[10.52,+Inf) decl=someExtensionFunction()
6464@available ( OSX 10 . 51 , * )
6565extension SomeClass {
6666 @available ( OSX 10 . 52 , * )
6767 func someExtensionFunction( ) { }
6868}
6969
70- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=functionWithStmtCondition
71- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.52,+Inf)
72- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.53,+Inf)
73- // CHECK-NEXT: {{^}} (if_then versions=[10.53,+Inf)
74- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf)
75- // CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf)
76- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.55,+Inf)
77- // CHECK-NEXT: {{^}} (decl versions=[10.55,+Inf) decl=funcInGuardElse()
78- // CHECK-NEXT: {{^}} (guard_fallthrough versions=[10.55,+Inf)
79- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.56,+Inf)
80- // CHECK-NEXT: {{^}} (guard_fallthrough versions=[10.56,+Inf)
81- // CHECK-NEXT: {{^}} (decl versions=[10.57,+Inf) decl=funcInInnerIfElse()
70+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=functionWithStmtCondition
71+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.52,+Inf) explicit=[10.52,+Inf)
72+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.53,+Inf) explicit=[10.53,+Inf)
73+ // CHECK-NEXT: {{^}} (if_then versions=[10.53,+Inf) explicit=[10.53,+Inf)
74+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf) explicit=[10.54,+Inf)
75+ // CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf) explicit=[10.54,+Inf)
76+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.55,+Inf) explicit=[10.55,+Inf)
77+ // CHECK-NEXT: {{^}} (decl versions=[10.55,+Inf) explicit=[10.55,+Inf) decl=funcInGuardElse()
78+ // CHECK-NEXT: {{^}} (guard_fallthrough versions=[10.55,+Inf) explicit=[10.55,+Inf)
79+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.56,+Inf) explicit=[10.56,+Inf)
80+ // CHECK-NEXT: {{^}} (guard_fallthrough versions=[10.56,+Inf) explicit=[10.56,+Inf)
81+ // CHECK-NEXT: {{^}} (decl versions=[10.57,+Inf) explicit=[10.57,+Inf) decl=funcInInnerIfElse()
8282@available ( OSX 10 . 51 , * )
8383func functionWithStmtCondition( ) {
8484 if #available( OSX 10 . 52 , * ) ,
@@ -97,11 +97,11 @@ func functionWithStmtCondition() {
9797 }
9898}
9999
100- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=functionWithUnnecessaryStmtCondition
101- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.53,+Inf)
102- // CHECK-NEXT: {{^}} (if_then versions=[10.53,+Inf)
103- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf)
104- // CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf)
100+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=functionWithUnnecessaryStmtCondition
101+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.53,+Inf) explicit=[10.53,+Inf)
102+ // CHECK-NEXT: {{^}} (if_then versions=[10.53,+Inf) explicit=[10.53,+Inf)
103+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf) explicit=[10.54,+Inf)
104+ // CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf) explicit=[10.54,+Inf)
105105
106106@available ( OSX 10 . 51 , * )
107107func functionWithUnnecessaryStmtCondition( ) {
@@ -127,13 +127,13 @@ func functionWithUnnecessaryStmtCondition() {
127127 }
128128}
129129
130- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=functionWithUnnecessaryStmtConditionsHavingElseBranch
131- // CHECK-NEXT: {{^}} (if_else versions=empty
132- // CHECK-NEXT: {{^}} (decl versions=empty decl=funcInInnerIfElse()
133- // CHECK-NEXT: {{^}} (if_else versions=empty
134- // CHECK-NEXT: {{^}} (guard_else versions=empty
135- // CHECK-NEXT: {{^}} (guard_else versions=empty
136- // CHECK-NEXT: {{^}} (if_else versions=empty
130+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=functionWithUnnecessaryStmtConditionsHavingElseBranch
131+ // CHECK-NEXT: {{^}} (if_else versions=empty explicit=empty
132+ // CHECK-NEXT: {{^}} (decl versions=empty explicit=empty decl=funcInInnerIfElse()
133+ // CHECK-NEXT: {{^}} (if_else versions=empty explicit=empty
134+ // CHECK-NEXT: {{^}} (guard_else versions=empty explicit=empty
135+ // CHECK-NEXT: {{^}} (guard_else versions=empty explicit=empty
136+ // CHECK-NEXT: {{^}} (if_else versions=empty explicit=empty
137137
138138@available ( OSX 10 . 51 , * )
139139func functionWithUnnecessaryStmtConditionsHavingElseBranch( p: Int ? ) {
@@ -180,10 +180,10 @@ func functionWithUnnecessaryStmtConditionsHavingElseBranch(p: Int?) {
180180
181181}
182182
183- // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=functionWithWhile()
184- // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.52,+Inf)
185- // CHECK-NEXT: {{^}} (while_body versions=[10.52,+Inf)
186- // CHECK-NEXT: {{^}} (decl versions=[10.54,+Inf) decl=funcInWhileBody()
183+ // CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) explicit=[10.51,+Inf) decl=functionWithWhile()
184+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.52,+Inf) explicit=[10.52,+Inf)
185+ // CHECK-NEXT: {{^}} (while_body versions=[10.52,+Inf) explicit=[10.52,+Inf)
186+ // CHECK-NEXT: {{^}} (decl versions=[10.54,+Inf) explicit=[10.54,+Inf) decl=funcInWhileBody()
187187@available ( OSX 10 . 51 , * )
188188func functionWithWhile( ) {
189189 while #available( OSX 10 . 52 , * ) ,
@@ -192,3 +192,44 @@ func functionWithWhile() {
192192 func funcInWhileBody( ) { }
193193 }
194194}
195+
196+ // CHECK-NEXT: {{^}} (decl versions=[10.50.0,+Inf) explicit=[10.10,+Inf) decl=olderFunction()
197+ @available ( macOS 10 . 10 , * )
198+ public func olderFunction( ) {
199+ }
200+
201+ // CHECK-NEXT: {{^}} (decl versions=[10.10,+Inf) explicit=[10.10,+Inf) decl=inlinableFunction()
202+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.55,+Inf) explicit=[10.55,+Inf)
203+ // CHECK-NEXT: {{^}} (if_then versions=[10.55,+Inf) explicit=[10.55,+Inf)
204+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.15,+Inf)
205+ // CHECK-NEXT: {{^}} (if_then versions=[10.15,+Inf) explicit=[10.15,+Inf)
206+ // CHECK-NEXT: {{^}} (condition_following_availability versions=[10.15,+Inf) explicit=[10.15,+Inf)
207+ // CHECK-NEXT: {{^}} (guard_fallthrough versions=[10.15,+Inf) explicit=[10.15,+Inf)
208+ @available ( macOS 10 . 10 , * )
209+ @inlinable
210+ public func inlinableFunction( ) {
211+ if #available( macOS 10 . 55 , * ) { } else { }
212+
213+ if #available( macOS 10 . 15 , * ) { }
214+
215+ guard #available( macOS 10 . 15 , * ) else { }
216+
217+ func nestedFunc( ) { }
218+ }
219+
220+ // CHECK-NEXT: {{^}} (decl versions=[10.50.0,+Inf) explicit=[10.10,+Inf) decl=SomeOlderClass
221+ // CHECK-NEXT: {{^}} (decl versions=[10.10,+Inf) explicit=[10.10,+Inf) decl=someInlinableMethod()
222+ // CHECK-NEXT: {{^}} (decl versions=[10.15,+Inf) explicit=[10.15,+Inf) decl=someOtherInlinableMethod()
223+ // CHECK-NEXT: {{^}} (decl versions=[10.50.0,+Inf) explicit=[10.15,+Inf) decl=someMethod()
224+ @available ( OSX 10 . 10 , * )
225+ class SomeOlderClass {
226+ @inlinable
227+ func someInlinableMethod( ) { }
228+
229+ @available ( OSX 10 . 15 , * )
230+ @inlinable
231+ func someOtherInlinableMethod( ) { }
232+
233+ @available ( OSX 10 . 15 , * )
234+ func someMethod( ) { }
235+ }
0 commit comments