Skip to content

Commit c9a737b

Browse files
committed
AST: Don't drop inferred available attributes containing just unavailable.
Fixes a regression from #71922. Resolves rdar://124073829
1 parent 3aea3a0 commit c9a737b

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

lib/AST/Availability.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ static AvailableAttr *createAvailableAttr(PlatformKind Platform,
111111
ASTContext &Context) {
112112
// If there is no information that would go into the availability attribute,
113113
// don't create one.
114-
if (!Inferred.Introduced && !Inferred.Deprecated && !Inferred.Obsoleted &&
114+
if (Inferred.PlatformAgnostic == PlatformAgnosticAvailabilityKind::None &&
115+
!Inferred.Introduced && !Inferred.Deprecated && !Inferred.Obsoleted &&
115116
Message.empty() && Rename.empty() && !RenameDecl)
116117
return nullptr;
117118

test/ModuleInterface/property_wrapper_availability.swift

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,19 @@ public struct ConditionallyAvailableWrapper<T> {
1313
}
1414
}
1515

16+
@available(macOS, unavailable)
17+
@available(iOS, unavailable)
18+
@available(watchOS, unavailable)
19+
@available(tvOS, unavailable)
20+
@propertyWrapper
21+
public struct UnavailableWrapper<T> {
22+
public var wrappedValue: T
23+
24+
public init(wrappedValue: T) {
25+
self.wrappedValue = wrappedValue
26+
}
27+
}
28+
1629
// CHECK: public struct HasWrappers {
1730
public struct HasWrappers {
1831
// CHECK: @available(macOS 10.15.4, iOS 13.4, watchOS 6.2, tvOS 13.4, *)
@@ -26,3 +39,29 @@ public struct HasWrappers {
2639
@available(SwiftStdlib 5.2, *)
2740
@ConditionallyAvailableWrapper public var x: Int
2841
}
42+
43+
// CHECK: @available(macOS, unavailable)
44+
// CHECK-NEXT: @available(iOS, unavailable)
45+
// CHECK-NEXT: @available(watchOS, unavailable)
46+
// CHECK-NEXT: @available(tvOS, unavailable)
47+
// CHECK-NEXT: public struct UnavailableHasWrappers {
48+
@available(macOS, unavailable)
49+
@available(iOS, unavailable)
50+
@available(watchOS, unavailable)
51+
@available(tvOS, unavailable)
52+
public struct UnavailableHasWrappers {
53+
// CHECK-LABEL: @Library.UnavailableWrapper public var x: Swift.Int {
54+
// CHECK-NEXT: get
55+
// CHECK-NEXT: @available(iOS, unavailable)
56+
// CHECK-NEXT: @available(tvOS, unavailable)
57+
// CHECK-NEXT: @available(watchOS, unavailable)
58+
// CHECK-NEXT: @available(macOS, unavailable)
59+
// CHECK-NEXT: set
60+
// CHECK-NEXT: @available(iOS, unavailable)
61+
// CHECK-NEXT: @available(tvOS, unavailable)
62+
// CHECK-NEXT: @available(watchOS, unavailable)
63+
// CHECK-NEXT: @available(macOS, unavailable)
64+
// CHECK-NEXT: _modify
65+
// CHECK-NEXT: }
66+
@UnavailableWrapper public var x: Int
67+
}

0 commit comments

Comments
 (0)