1/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
2/* { dg-do compile } */
3/* { dg-options "-Wno-protocol" } */
4
5#include <objc/objc.h>
6
7/* Test the -Wno-protocol flag.  With this, at a class is accepted
8   (with no warnings) as conforming to a protocol even if some
9   protocol methods are implemented in the superclass.  */
10
11@protocol MyProtocol
12- (int)method;
13@end
14
15@protocol MyProtocol2
16- (int)method2;
17@end
18
19/* The superclass implements the method required by the protocol.  */
20@interface MyRootClass
21{
22  Class isa;
23}
24- (int)method;
25@end
26
27@implementation MyRootClass
28- (int)method
29{
30  return 23;
31}
32@end
33
34/* The subclass inherits the method (does not implement it directly)
35   but that still makes it conform to the protocol.  No warnings.  */
36@interface MySubClass : MyRootClass <MyProtocol>
37@end
38
39@implementation MySubClass
40@end /* No warnings here.  */
41
42
43/* The subclass instead does not inherit the method method2 (and does
44   not implement it directly) so it does not conform to the
45   protocol MyProtocol2.  */
46@interface MySubClass2 : MyRootClass <MyProtocol2>
47@end
48
49@implementation MySubClass2
50@end /* Warnings here, below.  */
51/* { dg-warning "incomplete implementation of class .MySubClass2." "" { target *-*-* } .-1 } */
52/* { dg-warning "method definition for .\\-method2. not found" "" { target *-*-* } .-2 } */
53/* { dg-warning "class .MySubClass2. does not fully implement the .MyProtocol2. protocol" "" { target *-*-* } .-3 } */
54