Skip to content

Commit 706bd33

Browse files
committed
Don't try to infer @objc for non-getter/setter accessors (swiftlang#6926)
These are never part of an @objc protocol, so we shouldn't bother looking for them and certainly shouldn't expect them to be there. Fixes a crash introduced in 1f21213. rdar://problem/30101703
1 parent 635581a commit 706bd33

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

lib/Sema/TypeCheckProtocol.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5377,8 +5377,24 @@ TypeChecker::findWitnessedObjCRequirements(const ValueDecl *witness,
53775377
auto accessorKind = AccessorKind::NotAccessor;
53785378
if (auto *fn = dyn_cast<FuncDecl>(witness)) {
53795379
accessorKind = fn->getAccessorKind();
5380-
if (accessorKind != AccessorKind::NotAccessor) {
5380+
switch (accessorKind) {
5381+
case AccessorKind::IsAddressor:
5382+
case AccessorKind::IsMutableAddressor:
5383+
case AccessorKind::IsMaterializeForSet:
5384+
// These accessors are never exposed to Objective-C.
5385+
return result;
5386+
case AccessorKind::IsDidSet:
5387+
case AccessorKind::IsWillSet:
5388+
// These accessors are folded into the setter.
5389+
return result;
5390+
case AccessorKind::IsGetter:
5391+
case AccessorKind::IsSetter:
5392+
// These are found relative to the main decl.
53815393
name = fn->getAccessorStorageDecl()->getFullName();
5394+
break;
5395+
case AccessorKind::NotAccessor:
5396+
// Do nothing.
5397+
break;
53825398
}
53835399
}
53845400

test/decl/protocol/objc.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,19 @@ class C7g : P7 {
207207
}
208208
}
209209

210+
class C7h : P7 {
211+
@objc var prop: Int = 0 {
212+
didSet {}
213+
}
214+
}
215+
216+
class C7i : P7 {
217+
@objc var prop: Int {
218+
unsafeAddress { fatalError() }
219+
unsafeMutableAddress { fatalError() }
220+
}
221+
}
222+
210223
@objc protocol P8 {
211224
@objc optional var prop: Int {
212225
@objc(getTheProp) get

0 commit comments

Comments
 (0)