]> granicus.if.org Git - clang/commitdiff
Fix another place where clang check objc selector name instead of checking the select...
authorJean-Daniel Dupas <devlists@shadowlab.org>
Fri, 19 Jul 2013 20:25:56 +0000 (20:25 +0000)
committerJean-Daniel Dupas <devlists@shadowlab.org>
Fri, 19 Jul 2013 20:25:56 +0000 (20:25 +0000)
Summary: In ARC mode, clang emits a warning if the result of an 'init' method is unused but miss cases where the method does not follows the Cocoa naming convention but is properly declared as an init family method.

CC: cfe-commits, eli.friedman
Differential Revision: http://llvm-reviews.chandlerc.com/D1163

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

lib/AST/Expr.cpp
test/SemaObjC/arc.m

index 2e459626468cb43edd9274237bd3bae76611e81c..37f7d267d97c41d6e380dac8460d03bcf9d7ef29 100644 (file)
@@ -2080,9 +2080,7 @@ bool Expr::isUnusedResultAWarning(const Expr *&WarnE, SourceLocation &Loc,
     if (Ctx.getLangOpts().ObjCAutoRefCount &&
         ME->isInstanceMessage() &&
         !ME->getType()->isVoidType() &&
-        ME->getSelector().getIdentifierInfoForSlot(0) &&
-        ME->getSelector().getIdentifierInfoForSlot(0)
-                                               ->getName().startswith("init")) {
+        ME->getMethodFamily() == OMF_init) {
       WarnE = this;
       Loc = getExprLoc();
       R1 = ME->getSourceRange();
index 2646adce94f95150b2e2aeac110f8f2d89cee9e2..76a97f3ab3b68ebfb502d6d766a5379519df684a 100644 (file)
@@ -84,14 +84,17 @@ void test1(A *a) {
 // rdar://8861761
 
 @interface B
--(id)alloc;
+(id)alloc;
 - (id)initWithInt: (int) i;
+- (id)myInit __attribute__((objc_method_family(init)));
 @end
 
 void rdar8861761() {
   B *o1 = [[B alloc] initWithInt:0];
   B *o2 = [B alloc];
   [o2 initWithInt:0]; // expected-warning {{expression result unused}}
+  B *o3 = [[B alloc] myInit];
+  [[B alloc] myInit]; // expected-warning {{expression result unused}}
 }
 
 // rdar://8925835