Skip to content

Commit d78f504

Browse files
authored
Merge pull request #34323 from xymus/inherit-unavailability-5.3
[5.3][Sema] Consider inherited platform unavailability to silence diagnostics
2 parents bef1328 + df44b39 commit d78f504

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1565,7 +1565,10 @@ static bool isInsideCompatibleUnavailableDeclaration(
15651565
auto IsUnavailable = [platform](const Decl *D) {
15661566
auto EnclosingUnavailable =
15671567
D->getAttrs().getUnavailable(D->getASTContext());
1568-
return EnclosingUnavailable && EnclosingUnavailable->Platform == platform;
1568+
return EnclosingUnavailable &&
1569+
(EnclosingUnavailable->Platform == platform ||
1570+
inheritsAvailabilityFromPlatform(platform,
1571+
EnclosingUnavailable->Platform));
15691572
};
15701573

15711574
return someEnclosingDeclMatches(ReferenceRange, ReferenceDC, IsUnavailable);

test/attr/attr_availability_maccatalyst.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,27 @@ protocol P: Builtin.AnyObject {
140140
}
141141

142142
extension X: P {}
143+
144+
// Test platform inheritance for iOS unavailability.
145+
// rdar://68597591
146+
147+
@available(iOS, unavailable)
148+
public struct UnavailableOniOS { } // expected-note 2 {{'UnavailableOniOS' has been explicitly marked unavailable here}}
149+
150+
@available(iOS, unavailable)
151+
func unavailableOniOS(_ p: UnavailableOniOS) { } // ok
152+
153+
func functionUsingAnUnavailableType(_ p: UnavailableOniOS) { } // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
154+
155+
public extension UnavailableOniOS { } // expected-error {{'UnavailableOniOS' is unavailable in iOS}}
156+
157+
@available(iOS, unavailable)
158+
public extension UnavailableOniOS { // ok
159+
func someMethod(_ p: UnavailableOniOS) { }
160+
}
161+
162+
@available(iOS, unavailable)
163+
@available(macCatalyst, introduced: 13.0)
164+
public struct AvailableOnMacCatalyst { }
165+
166+
public extension AvailableOnMacCatalyst { } // ok

0 commit comments

Comments
 (0)