summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExprObjC.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2011-07-13 19:05:43 +0000
committerFariborz Jahanian <fjahanian@apple.com>2011-07-13 19:05:43 +0000
commit9a881019a597d218f838fb1e2b92fba19258a5bd (patch)
tree929c02e2cb571811abd26e683fe8188b679f248d /clang/lib/Sema/SemaExprObjC.cpp
parentb7cdd8772cf63ce0402700a39abdd6420a554612 (diff)
downloadbcm5719-llvm-9a881019a597d218f838fb1e2b92fba19258a5bd.tar.gz
bcm5719-llvm-9a881019a597d218f838fb1e2b92fba19258a5bd.zip
With -Wselector, don't warn about unimplemented optional method
used in @selector expression because, well, their implementation is optional. // rdar://9545564 llvm-svn: 135057
Diffstat (limited to 'clang/lib/Sema/SemaExprObjC.cpp')
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index 3df6d3f96e4..02a4682cc84 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -178,11 +178,14 @@ ExprResult Sema::ParseObjCSelectorExpression(Selector Sel,
SourceRange(LParenLoc, RParenLoc));
if (!Method)
Diag(SelLoc, diag::warn_undeclared_selector) << Sel;
-
- 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
// retain/release/autorelease/dealloc/retainCount.
OpenPOWER on IntegriCloud