summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-12-11 18:53:07 +0000
committerDouglas Gregor <dgregor@apple.com>2012-12-11 18:53:07 +0000
commitc2e3d5cb2980b06fd51b8f535561fe2ecd2c8a55 (patch)
tree1190074c2980045fd6b2e6b45eb3294442f33a5b /clang
parent256f1dd0fc2766292071e4ad34a700d2d878dedd (diff)
downloadbcm5719-llvm-c2e3d5cb2980b06fd51b8f535561fe2ecd2c8a55.tar.gz
bcm5719-llvm-c2e3d5cb2980b06fd51b8f535561fe2ecd2c8a55.zip
Don't complain about incomplete implementations for methods that are
unavailable due to availability attributes. <rdar://problem/12798237> llvm-svn: 169903
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDeclObjC.cpp11
-rw-r--r--clang/test/SemaObjC/incomplete-implementation.m4
2 files changed, 13 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp
index 14546deef0c..64b000ee9ab 100644
--- a/clang/lib/Sema/SemaDeclObjC.cpp
+++ b/clang/lib/Sema/SemaDeclObjC.cpp
@@ -1168,8 +1168,17 @@ void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl,
void Sema::WarnUndefinedMethod(SourceLocation ImpLoc, ObjCMethodDecl *method,
bool &IncompleteImpl, unsigned DiagID) {
// No point warning no definition of method which is 'unavailable'.
- if (method->hasAttr<UnavailableAttr>())
+ switch (method->getAvailability()) {
+ case AR_Available:
+ case AR_Deprecated:
+ break;
+
+ // Don't warn about unavailable or not-yet-introduced methods.
+ case AR_NotYetIntroduced:
+ case AR_Unavailable:
return;
+ }
+
if (!IncompleteImpl) {
Diag(ImpLoc, diag::warn_incomplete_impl);
IncompleteImpl = true;
diff --git a/clang/test/SemaObjC/incomplete-implementation.m b/clang/test/SemaObjC/incomplete-implementation.m
index 54f66efcb22..69e355cb9a6 100644
--- a/clang/test/SemaObjC/incomplete-implementation.m
+++ b/clang/test/SemaObjC/incomplete-implementation.m
@@ -1,8 +1,10 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fsyntax-only -verify -Wno-objc-root-class %s
@interface I
- Meth; // expected-note{{method definition for 'Meth' not found}} \
// expected-note{{method 'Meth' declared here}}
+- unavailableMeth __attribute__((availability(macosx,unavailable)));
+- unavailableMeth2 __attribute__((unavailable));
@end
@implementation I // expected-warning{{incomplete implementation}}
OpenPOWER on IntegriCloud