Merge pull request #21657 from DougGregor/objc-read-modify
diff --git a/lib/Sema/TypeCheckDeclObjC.cpp b/lib/Sema/TypeCheckDeclObjC.cpp
index 1396b8e..6196585 100644
--- a/lib/Sema/TypeCheckDeclObjC.cpp
+++ b/lib/Sema/TypeCheckDeclObjC.cpp
@@ -1066,6 +1066,21 @@
if (VD->getFormalAccess() <= AccessLevel::FilePrivate)
return false;
+ if (auto accessor = dyn_cast<AccessorDecl>(VD)) {
+ switch (accessor->getAccessorKind()) {
+ case AccessorKind::DidSet:
+ case AccessorKind::Modify:
+ case AccessorKind::Read:
+ case AccessorKind::WillSet:
+ return false;
+
+ case AccessorKind::MutableAddress:
+ case AccessorKind::Address:
+ case AccessorKind::Get:
+ case AccessorKind::Set:
+ break;
+ }
+ }
return true;
};
@@ -1106,7 +1121,7 @@
cast<ExtensionDecl>(VD->getDeclContext())->getAttrs()
.hasAttribute<NonObjCAttr>()))
return None;
- if (isMemberOfObjCClassExtension(VD))
+ if (isMemberOfObjCClassExtension(VD) && canInferImplicitObjC())
return ObjCReason(ObjCReason::MemberOfObjCExtension);
if (isMemberOfObjCMembersClass(VD) && canInferImplicitObjC())
return ObjCReason(ObjCReason::MemberOfObjCMembersClass);
diff --git a/test/attr/attr_objc.swift b/test/attr/attr_objc.swift
index 71391e3..ebfe523 100644
--- a/test/attr/attr_objc.swift
+++ b/test/attr/attr_objc.swift
@@ -2312,3 +2312,18 @@
protocol ObjCProtocolWithUnownedProperty {
unowned var unownedProp: AnyObject { get set } // okay
}
+
+// rdar://problem/46699152: errors about read/modify accessors being implicitly
+// marked @objc.
+@objc class MyObjCClass: NSObject {}
+
+@objc
+extension MyObjCClass {
+ @objc
+ static var objCVarInObjCExtension: Bool {
+ get {
+ return true
+ }
+ set {}
+ }
+}