diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-01-21 22:32:29 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-01-21 22:32:29 +0000 |
commit | 60ccb9b2a926329de3d49716704c51cf7958b437 (patch) | |
tree | a8c346246c0ba76312283eb829f3b133d9738acf /clang/lib/Sema/SemaExprObjC.cpp | |
parent | ce1ffcf8a2b104f688b511d60f18b0fe2b1645d0 (diff) | |
download | bcm5719-llvm-60ccb9b2a926329de3d49716704c51cf7958b437.tar.gz bcm5719-llvm-60ccb9b2a926329de3d49716704c51cf7958b437.zip |
objectiveC: don't warn when in -Wselector mode and
an unimplemented selector is consumed by
"respondsToSelector:". // rdar://12938616
llvm-svn: 173097
Diffstat (limited to 'clang/lib/Sema/SemaExprObjC.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index bdc72661344..12f8d67d30f 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -967,24 +967,27 @@ ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, - SourceLocation RParenLoc) { - ObjCMethodDecl *Method = LookupInstanceMethodInGlobalPool(Sel, - SourceRange(LParenLoc, RParenLoc), false, false); - if (!Method) - Method = LookupFactoryMethodInGlobalPool(Sel, + SourceLocation RParenLoc, + bool WarnSelector) { + if (WarnSelector) { + ObjCMethodDecl *Method = LookupInstanceMethodInGlobalPool(Sel, + SourceRange(LParenLoc, RParenLoc), false, false); + if (!Method) + Method = LookupFactoryMethodInGlobalPool(Sel, SourceRange(LParenLoc, RParenLoc)); - if (!Method) - Diag(SelLoc, diag::warn_undeclared_selector) << Sel; + if (!Method) + Diag(SelLoc, diag::warn_undeclared_selector) << Sel; - if (!Method || - Method->getImplementationControl() != ObjCMethodDecl::Optional) { - llvm::DenseMap<Selector, SourceLocation>::iterator Pos - = ReferencedSelectors.find(Sel); - if (Pos == ReferencedSelectors.end()) - ReferencedSelectors.insert(std::make_pair(Sel, SelLoc)); + if (!Method || + Method->getImplementationControl() != ObjCMethodDecl::Optional) { + llvm::DenseMap<Selector, SourceLocation>::iterator Pos + = ReferencedSelectors.find(Sel); + if (Pos == ReferencedSelectors.end()) + ReferencedSelectors.insert(std::make_pair(Sel, SelLoc)); + } } - // In ARC, forbid the user from using @selector for + // In ARC, forbid the user from using @selector for // retain/release/autorelease/dealloc/retainCount. if (getLangOpts().ObjCAutoRefCount) { switch (Sel.getMethodFamily()) { |