PR c/47043
[official-gcc.git] / gcc / testsuite / objc.dg / proto-hier-1.m
blob99dcbc567737d276d16b1f0f92a9ccc1e3671bc8
1 /* Test for handling of protocol hierarchies.  */
2 /* Author: Ziemowit Laski <zlaski@apple.com>.  */
3 /* { dg-do compile } */
5 /* One-line substitute for objc/objc.h */
6 typedef struct objc_object { struct objc_class *class_pointer; } *id;
8 @protocol NSObj 
9 - (void)someMethod;
10 @end
12 @protocol NSCopying 
13 - (void)someOtherMethod;
14 @end
16 @interface NSObject <NSObj>
17 - (void)someMethod; 
18 @end
20 @implementation NSObject
21 - (void)someMethod {}
22 @end
24 @protocol Booing <NSObj>
25 - (void)boo;
26 @end
28 @interface Boo: NSObject <Booing>  // protocol has only one parent
29 @end
31 @implementation Boo
32 - (void)boo {}
33 @end
35 @protocol Fooing <NSCopying, NSObj>  // Fooing has two parent protocols
36 - (void)foo;
37 @end
39 @interface Foo: NSObject <Fooing>
40 @end
42 @implementation Foo
43 - (void)foo {}
44 - (void)someOtherMethod {}
45 @end
47 int foo(void) {
48   id<Booing, Fooing> stupidVar;
49   [stupidVar boo];
50   [stupidVar foo];
51   [stupidVar anotherMsg]; /* { dg-warning ".\\-anotherMsg. not found in protocol" } */
52        /* { dg-warning "no .\\-anotherMsg. method found" "" { target *-*-* } 51 } */
53   return 0;
56 /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 0 } */
57 /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 0 } */
58 /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 0 } */