Skip to content

Commit 48eb4b7

Browse files
committed
[Availability] Lazily expand type refinement contexts for extensions.
1 parent 11cb94f commit 48eb4b7

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,10 @@ class TypeRefinementContextBuilder : private ASTWalker {
551551
return true;
552552
}
553553

554+
if (isa<ExtensionDecl>(D)) {
555+
return true;
556+
}
557+
554558
return false;
555559
}
556560

test/Macros/macro_expand_extensions.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,3 +256,13 @@ final class SendableClass {
256256
@AddSendable
257257
class InvalidSendableClass {
258258
}
259+
260+
@AddSendable
261+
struct HasNestedType {
262+
struct Inner {}
263+
}
264+
265+
// Make sure no circularity error is produced when resolving
266+
// extensions of nested types when the outer type has an
267+
// attached macro that can add other nested types.
268+
extension HasNestedType.Inner {}

test/Sema/availability_refinement_contexts.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ protocol SomeProtocol {
7373
var protoProperty: Int { get }
7474
}
7575

76-
// CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=extension.SomeClass
77-
// CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someExtensionFunction()
76+
// CHECK-NEXT: {{^}} (decl_implicit versions=[10.13,+Inf) decl=extension.SomeClass
77+
// CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=extension.SomeClass
78+
// CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someExtensionFunction()
7879
@available(OSX 10.51, *)
7980
extension SomeClass {
8081
@available(OSX 10.52, *)
@@ -207,15 +208,16 @@ func functionWithWhile() {
207208
}
208209
}
209210

210-
// CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=extension.SomeClass
211-
// CHECK-NEXT: {{^}} (decl_implicit versions=[10.51,+Inf) decl=someStaticPropertyWithClosureInit
212-
// CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someStaticPropertyWithClosureInit
213-
// CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf)
214-
// CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf)
215-
// CHECK-NEXT: {{^}} (decl_implicit versions=[10.51,+Inf) decl=someStaticPropertyWithClosureInitInferred
216-
// CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someStaticPropertyWithClosureInitInferred
217-
// CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf)
218-
// CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf)
211+
// CHECK-NEXT: {{^}} (decl_implicit versions=[10.13,+Inf) decl=extension.SomeClass
212+
// CHECK-NEXT: {{^}} (decl versions=[10.51,+Inf) decl=extension.SomeClass
213+
// CHECK-NEXT: {{^}} (decl_implicit versions=[10.51,+Inf) decl=someStaticPropertyWithClosureInit
214+
// CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someStaticPropertyWithClosureInit
215+
// CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf)
216+
// CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf)
217+
// CHECK-NEXT: {{^}} (decl_implicit versions=[10.51,+Inf) decl=someStaticPropertyWithClosureInitInferred
218+
// CHECK-NEXT: {{^}} (decl versions=[10.52,+Inf) decl=someStaticPropertyWithClosureInitInferred
219+
// CHECK-NEXT: {{^}} (condition_following_availability versions=[10.54,+Inf)
220+
// CHECK-NEXT: {{^}} (if_then versions=[10.54,+Inf)
219221
@available(OSX 10.51, *)
220222
extension SomeClass {
221223
@available(OSX 10.52, *)

test/stdlib/Observation/Observable.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,12 @@ class GuardedAvailability {
225225
}()
226226
}
227227

228+
@Observable class Parent {
229+
class Nested {}
230+
}
231+
232+
extension Parent.Nested {}
233+
228234
struct CowContainer {
229235
final class Contents { }
230236

0 commit comments

Comments
 (0)