Skip to content

Commit

Permalink
Consider inherited platform unavailability to silence diagnostics
Browse files Browse the repository at this point in the history
rdar://68597591
  • Loading branch information
xymus committed Sep 25, 2020
1 parent 485467e commit 14e6772
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/Sema/TypeCheckAvailability.cpp
Expand Up @@ -1566,7 +1566,10 @@ static bool isInsideCompatibleUnavailableDeclaration(
auto IsUnavailable = [platform](const Decl *D) {
auto EnclosingUnavailable =
D->getAttrs().getUnavailable(D->getASTContext());
return EnclosingUnavailable && EnclosingUnavailable->Platform == platform;
return EnclosingUnavailable &&
(EnclosingUnavailable->Platform == platform ||
inheritsAvailabilityFromPlatform(platform,
EnclosingUnavailable->Platform));
};

return someEnclosingDeclMatches(ReferenceRange, ReferenceDC, IsUnavailable);
Expand Down
24 changes: 24 additions & 0 deletions test/attr/attr_availability_maccatalyst.swift
Expand Up @@ -140,3 +140,27 @@ protocol P: Builtin.AnyObject {
}

extension X: P {}

// Test platform inheritance for iOS unavailability.
// rdar://68597591

@available(iOS, unavailable)
public struct UnavailableOniOS { } // expected-note 2 {{'UnavailableOniOS' has been explicitly marked unavailable here}}

@available(iOS, unavailable)
func unavailableOniOS(_ p: UnavailableOniOS) { } // ok

func functionUsingAnUnavailableType(_ p: UnavailableOniOS) { } // expected-error {{'UnavailableOniOS' is unavailable in iOS}}

public extension UnavailableOniOS { } // expected-error {{'UnavailableOniOS' is unavailable in iOS}}

@available(iOS, unavailable)
public extension UnavailableOniOS { // ok
func someMethod(_ p: UnavailableOniOS) { }
}

@available(iOS, unavailable)
@available(macCatalyst, introduced: 13.0)
public struct AvailableOnMacCatalyst { }

public extension AvailableOnMacCatalyst { } // ok

0 comments on commit 14e6772

Please sign in to comment.