]> granicus.if.org Git - clang/commitdiff
[Sema][ObjC] perform-selector ARC check should see @selector in parens
authorAlex Lorenz <arphaman@gmail.com>
Mon, 20 Feb 2017 17:55:15 +0000 (17:55 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Mon, 20 Feb 2017 17:55:15 +0000 (17:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295674 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprObjC.cpp
test/SemaObjC/arc-peformselector.m

index 7dbd660f53ec697abf725774d6757af3c7287104..d770d1b5404e82b283e3fd0363f8d20c948e5c32 100644 (file)
@@ -2920,7 +2920,8 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver,
     
     case OMF_performSelector:
       if (Method && NumArgs >= 1) {
-        if (ObjCSelectorExpr *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0])) {
+        if (const auto *SelExp =
+                dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {
           Selector ArgSel = SelExp->getSelector();
           ObjCMethodDecl *SelMethod = 
             LookupInstanceMethodInGlobalPool(ArgSel,
index dec09e33ed689033bdda001f3606a2499b60b158..80fd6d8884d06883536c37db52f06ac20282f4b9 100644 (file)
@@ -27,6 +27,7 @@
   return [self performSelector : @selector(init)];
   return [self performSelector : sel1]; // expected-warning {{performSelector may cause a leak because its selector is unknown}} \
                                        // expected-note {{used here}}
+  return [self performSelector: (@selector(PlusZero))];
 
   return [self performSelector : @selector(PlusZero)];
   return [self performSelector : @selector(PlusOne)]; // expected-error {{performSelector names a selector which retains the object}}