objc-arc: enforce performSelector rules in rejecting retaining selectors
passed to it, and unknown selectors causing potential leak.
// rdar://9659270
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@134449 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index a9f4f95..127bb3c 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -286,6 +286,11 @@
method->hasAttr<NSReturnsAutoreleasedAttr>())
return false;
break;
+
+ case OMF_performSelector:
+ // we don't annotate performSelector's
+ return true;
+
}
method->addAttr(new (S.Context) NSReturnsRetainedAttr(SourceLocation(),
@@ -366,6 +371,7 @@
case OMF_copy:
case OMF_new:
case OMF_self:
+ case OMF_performSelector:
break;
}
}
@@ -1298,6 +1304,7 @@
case OMF_dealloc:
case OMF_retainCount:
case OMF_self:
+ case OMF_performSelector:
// Mismatches for these methods don't change ownership
// conventions, so we don't care.
return false;
@@ -2467,6 +2474,7 @@
case OMF_mutableCopy:
case OMF_release:
case OMF_retainCount:
+ case OMF_performSelector:
break;
case OMF_alloc: