From d17685751e5738f8ce12d51962ed9c8b33de3f0b Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 17 Jan 2014 08:34:19 +0000 Subject: [PATCH] Add more test cases for attribute 'objc_protocol_requires_explicit_implementation'. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199480 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../SemaObjC/protocols-suppress-conformance.m | 55 +++++++++++++++---- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/test/SemaObjC/protocols-suppress-conformance.m b/test/SemaObjC/protocols-suppress-conformance.m index e5fe1036bf..53b5e3d763 100644 --- a/test/SemaObjC/protocols-suppress-conformance.m +++ b/test/SemaObjC/protocols-suppress-conformance.m @@ -59,14 +59,21 @@ int x; __attribute__((objc_protocol_requires_explicit_implementation)) @protocol ProtocolA @required -- (void)rlyeh; -- (void)innsmouth; +- (void)rlyeh; // expected-note 2 {{method 'rlyeh' declared here}} +- (void)innsmouth; // expected-note 2 {{method 'innsmouth' declared here}} @end @protocol ProtocolB @required - (void)dunwich; -- (id)innsmouth; +- (void)innsmouth; // expected-note {{method 'innsmouth' declared here}} +@end + +__attribute__((objc_protocol_requires_explicit_implementation)) +@protocol ProtocolB_Explicit +@required +- (void)dunwich; +- (void)innsmouth; // expected-note 2 {{method 'innsmouth' declared here}} @end @protocol ProtocolC @@ -76,14 +83,24 @@ __attribute__((objc_protocol_requires_explicit_implementation)) - (void)dunwich; @end -@interface MyObject -@end +@interface MyObject @end -@interface MyLovecraft -@end +// Provide two variants of a base class, one that adopts ProtocolA and +// one that does not. +@interface Lovecraft @end +@interface Lovecraft_2 @end + +// Provide two variants of a subclass that conform to ProtocolB. One +// subclasses from a class that conforms to ProtocolA, the other that +// does not. +// +// From those, provide two variants that conformat to ProtocolB_Explicit +// instead. +@interface Shoggoth : Lovecraft @end +@interface Shoggoth_2 : Lovecraft_2 @end +@interface Shoggoth_Explicit : Lovecraft @end +@interface Shoggoth_2_Explicit : Lovecraft_2 @end -@interface MyShoggoth : MyLovecraft -@end @implementation MyObject - (void)innsmouth {} @@ -91,12 +108,28 @@ __attribute__((objc_protocol_requires_explicit_implementation)) - (void)dunwich {} @end -@implementation MyLovecraft +@implementation Lovecraft - (void)innsmouth {} - (void)rlyeh {} @end -@implementation MyShoggoth +@implementation Shoggoth +- (void)dunwich {} +@end + +@implementation Shoggoth_2 // expected-warning {{method 'innsmouth' in protocol 'ProtocolB' not implemented}}\ + // expected-warning {{method 'rlyeh' in protocol 'ProtocolA' not implemented}}\ + // expected-warning {{'innsmouth' in protocol 'ProtocolA' not implemented}} +- (void)dunwich {} +@end + +@implementation Shoggoth_Explicit // expected-warning {{method 'innsmouth' in protocol 'ProtocolB_Explicit' not implemented}} +- (void)dunwich {} +@end + +@implementation Shoggoth_2_Explicit // expected-warning {{method 'innsmouth' in protocol 'ProtocolB_Explicit' not implemented}}\ + // expected-warning {{method 'rlyeh' in protocol 'ProtocolA' not implemented}}\ + // expected-warning {{method 'innsmouth' in protocol 'ProtocolA' not implemented}} - (void)dunwich {} @end -- 2.40.0