]> granicus.if.org Git - clang/commitdiff
Objective-C. Better fix for my previous patch
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 18 Mar 2014 16:25:22 +0000 (16:25 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 18 Mar 2014 16:25:22 +0000 (16:25 +0000)
"No need to issue deprecated warning if deprecated method
in class extension is being implemented in primary class implementation
(no overriding is involved).
// rdar://16249335". No functionality change.

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

lib/Sema/SemaDeclObjC.cpp

index 9982493ebc670060ccf390cbd1645ba4591792f3..5be26a91a249a1e3331f7507927250599fa49be2 100644 (file)
@@ -372,7 +372,6 @@ void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {
       IC->lookupMethod(MDecl->getSelector(), MDecl->isInstanceMethod());
     
     if (IMD) {
-      ObjCCategoryDecl *CD = 0;
       ObjCImplDecl *ImplDeclOfMethodDef = 
         dyn_cast<ObjCImplDecl>(MDecl->getDeclContext());
       ObjCContainerDecl *ContDeclOfMethodDecl = 
@@ -380,20 +379,16 @@ void Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {
       ObjCImplDecl *ImplDeclOfMethodDecl = 0;
       if (ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ContDeclOfMethodDecl))
         ImplDeclOfMethodDecl = OID->getImplementation();
-      else if ((CD = dyn_cast<ObjCCategoryDecl>(ContDeclOfMethodDecl))) {
-        ImplDeclOfMethodDecl = CD->getImplementation();
+      else if (ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(ContDeclOfMethodDecl)) {
+        if (CD->IsClassExtension()) {
+          if (ObjCInterfaceDecl *OID = CD->getClassInterface())
+            ImplDeclOfMethodDecl = OID->getImplementation();
+        } else
+            ImplDeclOfMethodDecl = CD->getImplementation();
       }
-      bool warn;
-      // No need to issue deprecated warning if deprecated method in class
-      // extension is being implemented in primary class implementation
-      // (no overriding is involved).
-      if (ImplDeclOfMethodDef && CD && CD->IsClassExtension())
-        warn = false;
-      else
       // No need to issue deprecated warning if deprecated mehod in class/category
       // is being implemented in its own implementation (no overriding is involved).
-        warn = (!ImplDeclOfMethodDecl || ImplDeclOfMethodDecl != ImplDeclOfMethodDef);
-      if (warn)
+      if (!ImplDeclOfMethodDecl || ImplDeclOfMethodDecl != ImplDeclOfMethodDef)
         DiagnoseObjCImplementedDeprecations(*this, 
                                           dyn_cast<NamedDecl>(IMD), 
                                           MDecl->getLocation(), 0);