diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-07-05 22:38:59 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-07-05 22:38:59 +0000 |
commit | 9670e179a67d868e171feac44fb8f9e2f108c5e8 (patch) | |
tree | fdbc7fbb4072a90c7a2ffce680c19f82b927e20a /lib/Sema/SemaDeclObjC.cpp | |
parent | b18b8ad63061c23daf4d95b022764027739691d8 (diff) |
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
Diffstat (limited to 'lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index a9f4f95c20..127bb3cdcc 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -286,6 +286,11 @@ static bool CheckARCMethodDecl(Sema &S, ObjCMethodDecl *method) { 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 @@ void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) { case OMF_copy: case OMF_new: case OMF_self: + case OMF_performSelector: break; } } @@ -1298,6 +1304,7 @@ static bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, 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 @@ Decl *Sema::ActOnMethodDeclaration( case OMF_mutableCopy: case OMF_release: case OMF_retainCount: + case OMF_performSelector: break; case OMF_alloc: |