blob: e594a6e35dbe1c880bc3a1f8a108b31558686895 [file] [log] [blame]
Fariborz Jahanian4c71f1a2007-12-21 22:22:33 +00001// RUN: clang -fsyntax-only -verify %s
2
Fariborz Jahanian38860122008-01-09 00:33:05 +00003#define nil (void *)0;
4
Fariborz Jahanian4c71f1a2007-12-21 22:22:33 +00005extern void foo();
Fariborz Jahanian4c71f1a2007-12-21 22:22:33 +00006
7@protocol MyProtocol
8- (void) method;
9@end
10
11@interface MyClass
12@end
13
14@interface MyClass (Addition) <MyProtocol>
15- (void) method;
16@end
17
18@interface MyOtherClass : MyClass
19@end
20
21int main()
22{
23 id <MyProtocol> obj_id_p = nil;
24 MyClass *obj_c_cat_p = nil;
25 MyOtherClass *obj_c_super_p = nil;
26
Chris Lattner5cf216b2008-01-04 18:04:52 +000027 obj_c_cat_p = obj_id_p; // expected-error {{incompatible type assigning 'id<MyProtocol>', expected 'MyClass *'}}
28 obj_c_super_p = obj_id_p; // expected-error {{incompatible type assigning 'id<MyProtocol>', expected 'MyOtherClass *'}}
Fariborz Jahanian4c71f1a2007-12-21 22:22:33 +000029 obj_id_p = obj_c_cat_p; /* Ok */
30 obj_id_p = obj_c_super_p; /* Ok */
31
32 if (obj_c_cat_p == obj_id_p) foo(); /* Ok */
33 if (obj_c_super_p == obj_id_p) foo() ; /* Ok */
34 if (obj_id_p == obj_c_cat_p) foo(); /* Ok */
35 if (obj_id_p == obj_c_super_p) foo(); /* Ok */
36
37 return 0;
38}