Skip to content

Commit 53e04cb

Browse files
committed
[Sema] Test explicit versions in TypeRefinementContext
1 parent e61ffea commit 53e04cb

File tree

2 files changed

+86
-44
lines changed

2 files changed

+86
-44
lines changed

lib/AST/TypeRefinementContext.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ void TypeRefinementContext::print(raw_ostream &OS, SourceManager &SrcMgr,
300300
OS << "(" << getReasonName(getReason());
301301

302302
OS << " versions=" << AvailabilityInfo.getOSVersion().getAsString();
303+
OS << " explicit=" << AvailabilityInfoExplicit.getOSVersion().getAsString();
303304

304305
if (getReason() == Reason::Decl) {
305306
Decl *D = Node.getAsDecl();

test/Sema/availability_refinement_contexts.swift

Lines changed: 85 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
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, *)
1717
class 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, *)
4848
func 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, *)
5454
protocol 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, *)
6565
extension 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, *)
8383
func 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, *)
107107
func 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, *)
139139
func 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, *)
188188
func 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

Comments
 (0)