]> granicus.if.org Git - clang/commitdiff
Don't complain about incomplete implementations for methods that are
authorDouglas Gregor <dgregor@apple.com>
Tue, 11 Dec 2012 18:53:07 +0000 (18:53 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 11 Dec 2012 18:53:07 +0000 (18:53 +0000)
unavailable due to availability attributes. <rdar://problem/12798237>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169903 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclObjC.cpp
test/SemaObjC/incomplete-implementation.m

index 14546deef0c87f012a792de9d3563896683b5e6b..64b000ee9ab82c1865d13130593b22d611aa8dd2 100644 (file)
@@ -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;
index 54f66efcb22d12327a20afaa484a633ee296b73b..69e355cb9a6f6e5ba9f2aaef6687d06adc47c76e 100644 (file)
@@ -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}}