Skip to content

Commit d79fc62

Browse files
authored
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 f69efcd commit d79fc62

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
@@ -5374,8 +5374,24 @@ TypeChecker::findWitnessedObjCRequirements(const ValueDecl *witness,
53745374
auto accessorKind = AccessorKind::NotAccessor;
53755375
if (auto *fn = dyn_cast<FuncDecl>(witness)) {
53765376
accessorKind = fn->getAccessorKind();
5377-
if (accessorKind != AccessorKind::NotAccessor) {
5377+
switch (accessorKind) {
5378+
case AccessorKind::IsAddressor:
5379+
case AccessorKind::IsMutableAddressor:
5380+
case AccessorKind::IsMaterializeForSet:
5381+
// These accessors are never exposed to Objective-C.
5382+
return result;
5383+
case AccessorKind::IsDidSet:
5384+
case AccessorKind::IsWillSet:
5385+
// These accessors are folded into the setter.
5386+
return result;
5387+
case AccessorKind::IsGetter:
5388+
case AccessorKind::IsSetter:
5389+
// These are found relative to the main decl.
53785390
name = fn->getAccessorStorageDecl()->getFullName();
5391+
break;
5392+
case AccessorKind::NotAccessor:
5393+
// Do nothing.
5394+
break;
53795395
}
53805396
}
53815397

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)