]> granicus.if.org Git - clang/commitdiff
Objective-C. Fixes a bug where "new" family attribute
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 28 Jan 2014 22:46:29 +0000 (22:46 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 28 Jan 2014 22:46:29 +0000 (22:46 +0000)
was not being overridden in the category method implementation
resulting in bogus warning. // rdar://15919775

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

lib/Sema/SemaDeclObjC.cpp
test/SemaObjC/dealloc.m

index c91ce37711be18ccce6962ed8473f0d319429af9..8337c1f7e5ded111a9b7b01021d2a0087fe67cd0 100644 (file)
@@ -3165,7 +3165,8 @@ Decl *Sema::ActOnMethodDeclaration(
                                                    ObjCMethod->getLocation()));
     }
     if (isa<ObjCCategoryImplDecl>(ImpDecl)) {
-      ObjCMethodFamily family = ObjCMethod->getMethodFamily();
+      ObjCMethodFamily family = 
+        ObjCMethod->getSelector().getMethodFamily();
       if (family == OMF_dealloc && IMD && IMD->isOverriding()) 
         Diag(ObjCMethod->getLocation(), diag::warn_dealloc_in_category)
           << ObjCMethod->getDeclName();
index db89b20f5aad5113430c6b3b3e587356bef4862b..c1bd0b5ed46384fe16e269b3d4de3627d23cce29 100644 (file)
 - (void)dealloc { // expected-warning {{-dealloc is being overridden in a category}}
 }
 @end
+
+// rdar://15919775
+@interface NSObject @end
+@interface NSError:NSObject
+@end
+
+@interface NSError(CAT)
+- (NSError *)MCCopyAsPrimaryError __attribute__((objc_method_family(new)));
+@end
+@implementation NSError(CAT)
+- (NSError *)MCCopyAsPrimaryError {
+  return 0;
+}
+@end