]> granicus.if.org Git - clang/commitdiff
Add category test case for attribute 'objc_protocol_requires_explicit_implementation'.
authorTed Kremenek <kremenek@apple.com>
Thu, 27 Feb 2014 01:28:58 +0000 (01:28 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 27 Feb 2014 01:28:58 +0000 (01:28 +0000)
This test also illustrates that checking for properties is not working properly with
this attribute, as we are missing a diagnostic for a property not being implemented.

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

test/SemaObjC/protocols-suppress-conformance.m

index 9ec2a1ae8b78e3e0c7c85f5ce1023048b1ca7403..460b78fff37bba9a7b73bcd2e13d8b51f93df446 100644 (file)
@@ -4,7 +4,7 @@
 // to be explicitly implemented in the adopting class.
 __attribute__((objc_protocol_requires_explicit_implementation))
 @protocol Protocol
-- (void) theBestOfTimes; // expected-note {{method 'theBestOfTimes' declared here}}
+- (void) theBestOfTimes; // expected-note {{method 'theBestOfTimes' declared here}}
 @property (readonly) id theWorstOfTimes; // expected-note {{property declared here}}
 @end
 
@@ -122,7 +122,6 @@ __attribute__((objc_protocol_requires_explicit_implementation))
 @interface Shoggoth_Explicit : Lovecraft <ProtocolB_Explicit> @end
 @interface Shoggoth_2_Explicit : Lovecraft_2 <ProtocolB_Explicit> @end
 
-
 @implementation MyObject
 - (void)innsmouth {}
 - (void)rlyeh {}
@@ -154,6 +153,22 @@ __attribute__((objc_protocol_requires_explicit_implementation))
 - (void)dunwich {}
 @end
 
+// Categories adopting a protocol with explicit conformance need to implement that protocol.
+@interface Parent
+- (void) theBestOfTimes;
+@property (readonly) id theWorstOfTimes;
+@end
+
+@interface Derived : Parent
+@end
+
+@interface Derived (MyCat) <Protocol>
+@end
+
+@implementation Derived (MyCat) // expected-warning {{method 'theBestOfTimes' in protocol 'Protocol' not implemented}}
+@end
+
 __attribute__((objc_protocol_requires_explicit_implementation))  // expected-error{{attribute 'objc_protocol_requires_explicit_implementation' can only be applied to @protocol definitions, not forward declarations}}
 @protocol NotDefined;
 
+