blob: 1ccc2de93e37eb7b84f1bd1ffbc319d77fb0b899 [file] [log] [blame]
Daniel Dunbarffd408a2009-03-24 02:24:46 +00001// RUN: clang-cc -fsyntax-only -verify %s
Fariborz Jahanianfa601d52007-10-04 00:22:33 +00002
Fariborz Jahanianc716c942007-09-21 15:40:54 +00003@interface INTF1 @end
4
5@protocol p1,p2,p3;
6
7@protocol p1;
8
9@protocol PROTO1
10- (INTF1<p1>*) meth;
11@end
12
Chris Lattnere6dcfc22009-04-12 08:43:13 +000013@protocol PROTO2<p1>
Fariborz Jahanianc716c942007-09-21 15:40:54 +000014@end
15
16@protocol p1 @end
17
Chris Lattner5b250652008-11-23 22:46:27 +000018@protocol PROTO<p1> // expected-note {{previous definition is here}}
Fariborz Jahanianc716c942007-09-21 15:40:54 +000019@end
20
Fariborz Jahanian68199552009-04-06 23:43:32 +000021@protocol PROTO<p1> // expected-warning {{duplicate protocol definition of 'PROTO'}}
Fariborz Jahanianc716c942007-09-21 15:40:54 +000022@end
23
24@protocol PROTO3<p1, p1>
25@end
26
27@protocol p2 <p1>
28@end
29
Chris Lattnere6dcfc22009-04-12 08:43:13 +000030@protocol PROTO4 <p1, p2, PROTO, PROTO3, p3>
31@end
32
33
34// rdar://6771034
35@protocol XX;
36@protocol YY <XX> // Use of declaration of XX here should not cause a warning.
37- zz;
Fariborz Jahanianc716c942007-09-21 15:40:54 +000038@end
Chris Lattnerda869c82009-04-12 08:45:55 +000039
40
41// Detect circular dependencies.
42@protocol B;
43@protocol C < B > // expected-note{{previous definition is here}}
44@end
45@protocol A < C >
46@end
47@protocol B < A > // expected-error{{protocol has circular dependency}}
48@end
49