Skip to content

Commit da7a215

Browse files
committed
Sema: Diagnose overrides that are unavailable in Embedded Swift.
1 parent 67cc4c6 commit da7a215

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

lib/Sema/TypeCheckDeclOverride.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2191,7 +2191,7 @@ static bool checkSingleOverride(ValueDecl *override, ValueDecl *base) {
21912191
auto domain = unavailableAttr.getDomain();
21922192
auto parsedAttr = unavailableAttr.getParsedAttr();
21932193

2194-
if (!domain.isCustom()) {
2194+
if (domain.isPlatform() || domain.isUniversal()) {
21952195
// FIXME: [availability] Diagnose as an error in a future Swift version.
21962196
break;
21972197
}

test/embedded/availability.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,41 @@ public func also_universally_unavailable(
8787
has_unavailable_in_embedded_overload(.init()) // expected-error {{ambiguous use of 'init()'}}
8888
has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload
8989
}
90+
91+
class Base {
92+
func alwaysAvailable() { }
93+
94+
@_unavailableInEmbedded
95+
func overrideAsUnavailable() { }
96+
97+
@_unavailableInEmbedded
98+
func overrideLessUnavailable() { } // expected-note {{'overrideLessUnavailable()' has been explicitly marked unavailable here}}
99+
100+
func overrideMoreUnavailable() { } // expected-note {{overridden declaration is here}}
101+
}
102+
103+
class DerivedAvailable: Base {
104+
override func alwaysAvailable() { }
105+
106+
@_unavailableInEmbedded
107+
override func overrideAsUnavailable() { }
108+
109+
override func overrideLessUnavailable() { } // expected-error {{cannot override 'overrideLessUnavailable' which has been marked unavailable}}
110+
// expected-note@-1 {{remove 'override' modifier to declare a new 'overrideLessUnavailable'}}
111+
112+
@_unavailableInEmbedded
113+
override func overrideMoreUnavailable() { } // expected-error {{cannot override 'overrideMoreUnavailable' with a declaration that is marked unavailable}}{{112:3-26=}}
114+
}
115+
116+
@_unavailableInEmbedded
117+
class DerivedUnavailable: Base {
118+
override func alwaysAvailable() { }
119+
120+
@_unavailableInEmbedded
121+
override func overrideAsUnavailable() { }
122+
123+
override func overrideLessUnavailable() { }
124+
125+
@_unavailableInEmbedded
126+
override func overrideMoreUnavailable() { }
127+
}

0 commit comments

Comments
 (0)