Author: fjahanian
Date: Fri Oct 29 18:20:05 2010
New Revision: 117739

URL: http://llvm.org/viewvc/llvm-project?rev=117739&view=rev
Log:
Improve diagnostics reporting of un-implemented
methods in protocols when protocols are in system
headers and thus ignored. //rdar: //8227199

Modified:
    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
    cfe/trunk/lib/Sema/SemaDeclObjC.cpp
    cfe/trunk/test/SemaObjC/category-1.m
    cfe/trunk/test/SemaObjC/compare-qualified-id.m
    cfe/trunk/test/SemaObjC/method-arg-decay.m
    cfe/trunk/test/SemaObjC/method-undef-category-warn-1.m
    cfe/trunk/test/SemaObjC/method-undef-extension-warn-1.m
    cfe/trunk/test/SemaObjC/undef-protocol-methods-1.m

Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Oct 29 18:20:05 
2010
@@ -348,6 +348,7 @@
 def warn_accessor_property_type_mismatch : Warning<
   "type of property %0 does not match type of accessor %1">;
 def note_declared_at : Note<"declared here">;
+def note_method_declared_at : Note<"method declared here">;
 def err_setter_type_void : Error<"type of setter must be void">;
 def err_duplicate_method_decl : Error<"duplicate declaration of method %0">;
 def warn_missing_atend : Warning<"'@end' is missing in implementation 
context">;

Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Fri Oct 29 18:20:05 2010
@@ -745,8 +745,10 @@
     Diag(ImpLoc, diag::warn_incomplete_impl);
     IncompleteImpl = true;
   }
-  Diag(method->getLocation(), DiagID) 
-    << method->getDeclName();
+  if (DiagID == diag::warn_unimplemented_protocol_method)
+    Diag(ImpLoc, DiagID) << method->getDeclName();
+  else
+    Diag(method->getLocation(), DiagID) << method->getDeclName();
 }
 
 /// Determines if type B can be substituted for type A.  Returns true if we can
@@ -969,6 +971,7 @@
               unsigned DIAG = diag::warn_unimplemented_protocol_method;
               if (Diags.getDiagnosticLevel(DIAG) != Diagnostic::Ignored) {
                 WarnUndefinedMethod(ImpLoc, method, IncompleteImpl, DIAG);
+                Diag(method->getLocation(), diag::note_method_declared_at);
                 Diag(CDecl->getLocation(), diag::note_required_for_protocol_at)
                   << PDecl->getDeclName();
               }
@@ -986,6 +989,7 @@
       unsigned DIAG = diag::warn_unimplemented_protocol_method;
       if (Diags.getDiagnosticLevel(DIAG) != Diagnostic::Ignored) {
         WarnUndefinedMethod(ImpLoc, method, IncompleteImpl, DIAG);
+        Diag(method->getLocation(), diag::note_method_declared_at);
         Diag(IDecl->getLocation(), diag::note_required_for_protocol_at) <<
           PDecl->getDeclName();
       }

Modified: cfe/trunk/test/SemaObjC/category-1.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/category-1.m?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/category-1.m (original)
+++ cfe/trunk/test/SemaObjC/category-1.m Fri Oct 29 18:20:05 2010
@@ -62,7 +62,7 @@
 // <rdar://problem/7249233>
 
 @protocol MultipleCat_P
--(void) im0; // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
+-(void) im0; // expected-note {{method declared here}}
 @end
 
 @interface MultipleCat_I @end // expected-note {{required for direct or 
indirect protocol 'MultipleCat_P'}}
@@ -71,7 +71,8 @@
 
 @interface MultipleCat_I() <MultipleCat_P>  @end
 
-...@implementation MultipleCat_I // expected-warning {{incomplete 
implementation}}
+...@implementation MultipleCat_I // expected-warning {{incomplete 
implementation}} \
+                              // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
 @end
 
 // <rdar://problem/7680391> - Handle nameless categories with no name that 
refer

Modified: cfe/trunk/test/SemaObjC/compare-qualified-id.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/compare-qualified-id.m?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/compare-qualified-id.m (original)
+++ cfe/trunk/test/SemaObjC/compare-qualified-id.m Fri Oct 29 18:20:05 2010
@@ -5,7 +5,7 @@
 typedef struct _NSZone NSZone;
 @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
 @protocol NSObject  - (BOOL)isEqual:(id)object; @end
-...@protocol NSCopying  - (id)copyWithZone:(NSZone *)zone; @end // 
expected-warning {{method in protocol not implemented [-Wprotocol]}}
+...@protocol NSCopying  - (id)copyWithZone:(NSZone *)zone; @end // 
expected-note {{method declared here}}
 @protocol NSMutableCopying  - (id)mutableCopyWithZone:(NSZone *)zone; @end
 @protocol NSCoding  - (void)encodeWithCoder:(NSCoder *)aCoder; @end
 @interface NSObject <NSObject> {} @end
@@ -23,7 +23,8 @@
 - (NSString *)evaluateAsStringInContext:(XCPropertyExpansionContext *)context 
withNestingState:(const void *)state;
 @end
 
-...@implementation XCPropertyExpansionContext // expected-warning {{incomplete 
implementation}}
+...@implementation XCPropertyExpansionContext // expected-warning {{incomplete 
implementation}} \
+                                          // expected-warning {{method in 
protocol not implemented [-Wprotocol]}}
 - (NSString *)expandedValueForProperty:(NSString *)property {
   id <XCPropertyValues> cachedValueNode = [_propNamesToPropValuesCache 
objectForKey:property]; // expected-warning {{method '-objectForKey:' not found 
(return type defaults to 'id')}}
   if (cachedValueNode == ((void *)0)) { }

Modified: cfe/trunk/test/SemaObjC/method-arg-decay.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/method-arg-decay.m?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/method-arg-decay.m (original)
+++ cfe/trunk/test/SemaObjC/method-arg-decay.m Fri Oct 29 18:20:05 2010
@@ -56,7 +56,7 @@
 @interface PBXProjectModule : PBXModule <PBXFindableText> {
 }
 @end @class PBXBookmark;
-...@protocol PBXSelectionTarget - (NSObject <PBXSelectionTarget> *) 
performAction:(id)action withSelection:(NSArray *)selection; // 
expected-warning {{method in protocol not implemented [-Wprotocol]}}
+...@protocol PBXSelectionTarget - (NSObject <PBXSelectionTarget> *) 
performAction:(id)action withSelection:(NSArray *)selection;  // expected-note 
{{method declared here}}
 @end @class XCPropertyDictionary, XCPropertyCondition, XCPropertyConditionSet, 
XCMutablePropertyConditionSet;
 extern NSMutableArray *XCFindPossibleKeyModules(PBXModule *module, BOOL 
useExposedModulesOnly);
 @interface NSString (StringUtilities) - (NSString *) 
trimToLength:(NSInteger)length preserveRange:(NSRange)range;
@@ -72,7 +72,8 @@
 }
 - (PBXModule *) moduleForTab:(NSTabViewItem *)item; // expected-note {{method 
definition for 'moduleForTab:' not found}}
 @end  
-...@implementation XCPerspectiveModule // expected-warning {{incomplete 
implementation}}
+...@implementation XCPerspectiveModule // expected-warning {{incomplete 
implementation}} \
+                                   // expected-warning {{method in protocol 
not implemented [-Wprotocol]}}
 + (void) openForProjectDocument:(PBXProjectDocument *)projectDocument {
 }
 - (PBXModule *) type:(Class)type inPerspective:(id)perspectiveIdentifer  
matchingFunction:(BOOL (void *, void *))comparator usingData:(void *)data {

Modified: cfe/trunk/test/SemaObjC/method-undef-category-warn-1.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/method-undef-category-warn-1.m?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/method-undef-category-warn-1.m (original)
+++ cfe/trunk/test/SemaObjC/method-undef-category-warn-1.m Fri Oct 29 18:20:05 
2010
@@ -4,23 +4,25 @@
 @end
 
 @protocol P
-- (void) Pmeth;         // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
-- (void) Pmeth1;   // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
+- (void) Pmeth;          // expected-note {{method declared here }}
+- (void) Pmeth1;    // expected-note {{method declared here }}
 @end
 
 @interface MyClass1(CAT) <P> // expected-note {{required for direct or 
indirect protocol 'P'}}
 - (void) meth2;         // expected-note {{method definition for 'meth2' not 
found}}
 @end
 
-...@implementation MyClass1(CAT) // expected-warning {{incomplete 
implementation}} 
+...@implementation MyClass1(CAT) // expected-warning {{incomplete 
implementation}}  \
+                               // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
 - (void) Pmeth1{}
 @end
 
 @interface MyClass1(DOG) <P> // expected-note {{required for direct or 
indirect protocol 'P'}}
-- (void)ppp;    // expected-note {{method definition for 'ppp' not found}}
+- (void)ppp;    // expected-note {{method definition for 'ppp' not found}} 
 @end
 
-...@implementation MyClass1(DOG) // expected-warning {{incomplete 
implementation}}
+...@implementation MyClass1(DOG) // expected-warning {{incomplete 
implementation}} \
+               // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
 - (void) Pmeth {}
 @end
 

Modified: cfe/trunk/test/SemaObjC/method-undef-extension-warn-1.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/method-undef-extension-warn-1.m?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/method-undef-extension-warn-1.m (original)
+++ cfe/trunk/test/SemaObjC/method-undef-extension-warn-1.m Fri Oct 29 18:20:05 
2010
@@ -5,7 +5,7 @@
 
 @protocol P
 - (void)Pmeth;
-- (void)Pmeth1; // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
+- (void)Pmeth1; // expected-note {{method declared here}}
 @end
 
 // Class extension
@@ -18,6 +18,7 @@
 - (void)categoryMethod;
 @end
 
-...@implementation MyClass // expected-warning {{incomplete implementation}} 
+...@implementation MyClass // expected-warning {{incomplete implementation}}  \
+                       // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
 - (void)Pmeth {}
 @end

Modified: cfe/trunk/test/SemaObjC/undef-protocol-methods-1.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/undef-protocol-methods-1.m?rev=117739&r1=117738&r2=117739&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/undef-protocol-methods-1.m (original)
+++ cfe/trunk/test/SemaObjC/undef-protocol-methods-1.m Fri Oct 29 18:20:05 2010
@@ -1,25 +1,25 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s
 
 @protocol P1
-- (void) P1proto; // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
-+ (void) ClsP1Proto;   // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
+- (void) P1proto;  // expected-note {{method declared here}}
++ (void) ClsP1Proto;    // expected-note {{method declared here}}
 - (void) DefP1proto;
 @end
 @protocol P2
-- (void) P2proto;   // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
-+ (void) ClsP2Proto;  // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
+- (void) P2proto;   // expected-note {{method declared here}}
++ (void) ClsP2Proto;  // expected-note {{method declared here}}
 @end
 
 @protocol P3<P2>
-- (void) P3proto;  // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
-+ (void) ClsP3Proto;  // expected-warning {{method in protocol not implemented 
[-Wprotocol]}}
+- (void) P3proto;   // expected-note {{method declared here}}
++ (void) ClsP3Proto;   // expected-note {{method declared here}}
 + (void) DefClsP3Proto;
 @end
 
 @protocol PROTO<P1, P3>
-- (void) meth;          // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
-- (void) meth : (int) arg1;  // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
-+ (void) cls_meth : (int) arg1;  // expected-warning {{method in protocol not 
implemented [-Wprotocol]}}
+- (void) meth;           // expected-note {{method declared here}}
+- (void) meth : (int) arg1;   // expected-note {{method declared here}}
++ (void) cls_meth : (int) arg1;   // expected-note {{method declared here}}
 @end
 
 @interface INTF <PROTO> // expected-note 3 {{required for direct or indirect 
protocol 'PROTO'}} \
@@ -28,7 +28,8 @@
                        // expected-note 2 {{required for direct or indirect 
protocol 'P2'}}
 @end
 
-...@implementation INTF   // expected-warning {{incomplete implementation}} 
+...@implementation INTF   // expected-warning {{incomplete implementation}} \
+                       // expected-warning 9 {{method in protocol not 
implemented [-Wprotocol}}
 - (void) DefP1proto{}
 
 + (void) DefClsP3Proto{}


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to