From: Alex Lorenz Date: Mon, 20 Feb 2017 17:55:15 +0000 (+0000) Subject: [Sema][ObjC] perform-selector ARC check should see @selector in parens X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=269fdd27b59fe7af6a75e5343a23ac3305314782;p=clang [Sema][ObjC] perform-selector ARC check should see @selector in parens git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@295674 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 7dbd660f53..d770d1b540 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -2920,7 +2920,8 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver, case OMF_performSelector: if (Method && NumArgs >= 1) { - if (ObjCSelectorExpr *SelExp = dyn_cast(Args[0])) { + if (const auto *SelExp = + dyn_cast(Args[0]->IgnoreParens())) { Selector ArgSel = SelExp->getSelector(); ObjCMethodDecl *SelMethod = LookupInstanceMethodInGlobalPool(ArgSel, diff --git a/test/SemaObjC/arc-peformselector.m b/test/SemaObjC/arc-peformselector.m index dec09e33ed..80fd6d8884 100644 --- a/test/SemaObjC/arc-peformselector.m +++ b/test/SemaObjC/arc-peformselector.m @@ -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}}