]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGenObjC/protocols-lazy.m
Updaet clang to 92395.
[FreeBSD/FreeBSD.git] / test / CodeGenObjC / protocols-lazy.m
1 // RUN: %clang_cc1 -emit-llvm -triple=i686-apple-darwin8 -o %t %s
2 // RUNX: llvm-gcc -S -emit-llvm -o %t %s &&
3
4 // No object generated
5 // RUN: grep OBJC_PROTOCOL_P0 %t | count 0
6 @protocol P0;
7
8 // No object generated
9 // RUN: grep OBJC_PROTOCOL_P1 %t | count 0
10 @protocol P1 -im1; @end
11
12 // Definition triggered by protocol reference.
13 // RUN: grep OBJC_PROTOCOL_P2 %t | count 3
14 // RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P2 %t | count 3
15 @protocol P2 -im1; @end
16 void f0() { id x = @protocol(P2); }
17
18 // Forward definition triggered by protocol reference.
19 // RUN: grep OBJC_PROTOCOL_P3 %t | count 3
20 // RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P3 %t | count 0
21 @protocol P3;
22 void f1() { id x = @protocol(P3); }
23
24 // Definition triggered by class reference.
25 // RUN: grep OBJC_PROTOCOL_P4 %t | count 3
26 // RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P4 %t | count 3
27 @protocol P4 -im1; @end
28 @interface I0<P4> @end
29 @implementation I0 -im1 { return 0; }; @end
30
31 // Definition following forward reference.
32 // RUN: grep OBJC_PROTOCOL_P5 %t | count 3
33 // RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P5 %t | count 3
34 @protocol P5;
35 void f2() { id x = @protocol(P5); } // This generates a forward
36                                     // reference, which has to be
37                                     // updated on the next line.
38 @protocol P5 -im1; @end               
39
40 // Protocol reference following definition.
41 // RUN: grep OBJC_PROTOCOL_P6 %t | count 4
42 // RUN: grep OBJC_PROTOCOL_INSTANCE_METHODS_P6 %t | count 3
43 @protocol P6 -im1; @end
44 @interface I1<P6> @end
45 @implementation I1 -im1 { return 0; }; @end
46 void f3() { id x = @protocol(P6); }
47