Skip to content

Commit 8581d1d

Browse files
[Sema] Avoid misleading diagnostics for incomplete enum computed properties
1 parent aa06727 commit 8581d1d

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

lib/Sema/TypeCheckStorage.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3326,6 +3326,7 @@ StorageImplInfoRequest::evaluate(Evaluator &evaluator,
33263326
bool hasModify = storage->getParsedAccessor(AccessorKind::Modify);
33273327
bool hasMutableAddress = storage->getParsedAccessor(AccessorKind::MutableAddress);
33283328

3329+
auto *DC = storage->getDeclContext();
33293330
// 'get', 'read', and a non-mutable addressor are all exclusive.
33303331
ReadImplKind readImpl;
33313332
if (storage->getParsedAccessor(AccessorKind::Get)) {
@@ -3354,10 +3355,10 @@ StorageImplInfoRequest::evaluate(Evaluator &evaluator,
33543355
readImpl = ReadImplKind::Stored;
33553356
}
33563357

3357-
// Extensions can't have stored properties. If there are braces, assume
3358-
// this is an incomplete computed property. This avoids an "extensions
3359-
// must not contain stored properties" error later on.
3360-
} else if (isa<ExtensionDecl>(storage->getDeclContext()) &&
3358+
// Extensions and enums can't have stored properties. If there are braces,
3359+
// assume this is an incomplete computed property. This avoids an
3360+
// "extensions|enums must not contain stored properties" error later on.
3361+
} else if ((isa<ExtensionDecl>(DC) || isa<EnumDecl>(DC)) &&
33613362
storage->getBracesRange().isValid()) {
33623363
readImpl = ReadImplKind::Get;
33633364

test/decl/var/properties.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,3 +1340,8 @@ class LazyPropInClass {
13401340
lazy var foo: Int = { return 0 } // expected-error {{function produces expected type 'Int'; did you mean to call it with '()'?}}
13411341
// expected-note@-1 {{Remove '=' to make 'foo' a computed property}}{{21-23=}}{{3-8=}}
13421342
}
1343+
1344+
// SR-15657
1345+
enum SR15657 {
1346+
var foo: Int {} // expected-error{{computed property must have accessors specified}}
1347+
}

0 commit comments

Comments
 (0)