1/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
2/* { dg-do compile } */
3/* { dg-additional-options "-Wno-objc-root-class" } */
4
5#include <objc/objc.h>
6
7/* Test standard warnings when a class conforms to a protocol but some
8   methods are implemented in the superclass.  Use -Wno-protocol to
9   turn these off.  */
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   and unless -Wno-protocol is used, we emit a warning.  */
36@interface MySubClass : MyRootClass <MyProtocol>
37@end
38
39@implementation MySubClass
40@end
41/* { dg-warning "incomplete implementation of class .MySubClass." "" { target *-*-* } .-1 } */
42/* { dg-warning "method definition for .\\-method. not found" "" { target *-*-* } .-2 } */
43/* { dg-warning "class .MySubClass. does not fully implement the .MyProtocol. protocol" "" { target *-*-* } .-3 } */
44
45
46/* The subclass instead does not inherit the method method2 (and does
47   not implement it directly) so it does not conform to the
48   protocol MyProtocol2.  */
49@interface MySubClass2 : MyRootClass <MyProtocol2>
50@end
51
52@implementation MySubClass2
53@end /* Warnings here, below.  */
54/* { dg-warning "incomplete implementation of class .MySubClass2." "" { target *-*-* } .-1 } */
55/* { dg-warning "method definition for .\\-method2. not found" "" { target *-*-* } .-2 } */
56/* { dg-warning "class .MySubClass2. does not fully implement the .MyProtocol2. protocol" "" { target *-*-* } .-3 } */
57