annotate clang/test/AST/ast-dump-decl.m @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
1 // Test without serialization:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
2 // RUN: %clang_cc1 -Wno-unused -fblocks -ast-dump -ast-dump-filter Test %s \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
3 // RUN: | FileCheck --strict-whitespace %s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
4 //
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
5 // Test with serialization:
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
6 // RUN: %clang_cc1 -Wno-unused -fblocks -emit-pch -o %t %s
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
7 // RUN: %clang_cc1 -x objective-c -Wno-unused -fblocks -include-pch %t \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
8 // RUN: -ast-dump-all -ast-dump-filter Test /dev/null \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
9 // RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
10 // RUN: | FileCheck --strict-whitespace %s
150
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 @protocol P
anatofuz
parents:
diff changeset
13 @end
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15 @interface A
anatofuz
parents:
diff changeset
16 @end
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 @interface TestObjCIvarDecl : A
anatofuz
parents:
diff changeset
19 @end
anatofuz
parents:
diff changeset
20
anatofuz
parents:
diff changeset
21 @implementation TestObjCIvarDecl {
anatofuz
parents:
diff changeset
22 int varDefault;
anatofuz
parents:
diff changeset
23 @private int varPrivate;
anatofuz
parents:
diff changeset
24 @protected int varProtected;
anatofuz
parents:
diff changeset
25 @public int varPublic;
anatofuz
parents:
diff changeset
26 @package int varPackage;
anatofuz
parents:
diff changeset
27 }
anatofuz
parents:
diff changeset
28 @end
anatofuz
parents:
diff changeset
29 // CHECK: ObjCImplementationDecl{{.*}} TestObjCIvarDecl
anatofuz
parents:
diff changeset
30 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCIvarDecl'
anatofuz
parents:
diff changeset
31 // CHECK-NEXT: ObjCIvarDecl{{.*}} varDefault 'int' private
anatofuz
parents:
diff changeset
32 // CHECK-NEXT: ObjCIvarDecl{{.*}} varPrivate 'int' private
anatofuz
parents:
diff changeset
33 // CHECK-NEXT: ObjCIvarDecl{{.*}} varProtected 'int' protected
anatofuz
parents:
diff changeset
34 // CHECK-NEXT: ObjCIvarDecl{{.*}} varPublic 'int' public
anatofuz
parents:
diff changeset
35 // CHECK-NEXT: ObjCIvarDecl{{.*}} varPackage 'int' package
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 @interface testObjCMethodDecl : A {
anatofuz
parents:
diff changeset
38 }
anatofuz
parents:
diff changeset
39 - (int) TestObjCMethodDecl: (int)i, ...;
anatofuz
parents:
diff changeset
40 // CHECK: ObjCMethodDecl{{.*}} - TestObjCMethodDecl: 'int' variadic
anatofuz
parents:
diff changeset
41 // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'
anatofuz
parents:
diff changeset
42 @end
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 @implementation testObjCMethodDecl
anatofuz
parents:
diff changeset
45 - (int) TestObjCMethodDecl: (int)i, ... {
anatofuz
parents:
diff changeset
46 return 0;
anatofuz
parents:
diff changeset
47 }
anatofuz
parents:
diff changeset
48 // CHECK: ObjCMethodDecl{{.*}} - TestObjCMethodDecl: 'int' variadic
anatofuz
parents:
diff changeset
49 // CHECK-NEXT: ImplicitParamDecl{{.*}} self
anatofuz
parents:
diff changeset
50 // CHECK-NEXT: ImplicitParamDecl{{.*}} _cmd
anatofuz
parents:
diff changeset
51 // CHECK-NEXT: ParmVarDecl{{.*}} i 'int'
anatofuz
parents:
diff changeset
52 // CHECK-NEXT: CompoundStmt
anatofuz
parents:
diff changeset
53 @end
anatofuz
parents:
diff changeset
54
anatofuz
parents:
diff changeset
55 @protocol TestObjCProtocolDecl
anatofuz
parents:
diff changeset
56 - (void) foo;
anatofuz
parents:
diff changeset
57 @end
anatofuz
parents:
diff changeset
58 // CHECK: ObjCProtocolDecl{{.*}} TestObjCProtocolDecl
anatofuz
parents:
diff changeset
59 // CHECK-NEXT: ObjCMethodDecl{{.*}} foo
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 @interface TestObjCClass : A <P>
anatofuz
parents:
diff changeset
62 - (void) foo;
anatofuz
parents:
diff changeset
63 @end
anatofuz
parents:
diff changeset
64 // CHECK: ObjCInterfaceDecl{{.*}} TestObjCClass
anatofuz
parents:
diff changeset
65 // CHECK-NEXT: super ObjCInterface{{.*}} 'A'
anatofuz
parents:
diff changeset
66 // CHECK-NEXT: ObjCImplementation{{.*}} 'TestObjCClass'
anatofuz
parents:
diff changeset
67 // CHECK-NEXT: ObjCProtocol{{.*}} 'P'
anatofuz
parents:
diff changeset
68 // CHECK-NEXT: ObjCMethodDecl{{.*}} foo
anatofuz
parents:
diff changeset
69
anatofuz
parents:
diff changeset
70 @implementation TestObjCClass : A {
anatofuz
parents:
diff changeset
71 int i;
anatofuz
parents:
diff changeset
72 }
anatofuz
parents:
diff changeset
73 - (void) foo {
anatofuz
parents:
diff changeset
74 }
anatofuz
parents:
diff changeset
75 @end
anatofuz
parents:
diff changeset
76 // CHECK: ObjCImplementationDecl{{.*}} TestObjCClass
anatofuz
parents:
diff changeset
77 // CHECK-NEXT: super ObjCInterface{{.*}} 'A'
anatofuz
parents:
diff changeset
78 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass'
anatofuz
parents:
diff changeset
79 // CHECK-NEXT: ObjCIvarDecl{{.*}} i
anatofuz
parents:
diff changeset
80 // CHECK-NEXT: ObjCMethodDecl{{.*}} foo
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 @interface TestObjCClass (TestObjCCategoryDecl) <P>
anatofuz
parents:
diff changeset
83 - (void) bar;
anatofuz
parents:
diff changeset
84 @end
anatofuz
parents:
diff changeset
85 // CHECK: ObjCCategoryDecl{{.*}} TestObjCCategoryDecl
anatofuz
parents:
diff changeset
86 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass'
anatofuz
parents:
diff changeset
87 // CHECK-NEXT: ObjCCategoryImpl{{.*}} 'TestObjCCategoryDecl'
anatofuz
parents:
diff changeset
88 // CHECK-NEXT: ObjCProtocol{{.*}} 'P'
anatofuz
parents:
diff changeset
89 // CHECK-NEXT: ObjCMethodDecl{{.*}} bar
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 @interface TestGenericInterface<T> : A<P> {
anatofuz
parents:
diff changeset
92 }
anatofuz
parents:
diff changeset
93 @end
anatofuz
parents:
diff changeset
94 // CHECK: ObjCInterfaceDecl{{.*}} TestGenericInterface
anatofuz
parents:
diff changeset
95 // CHECK-NEXT: -super ObjCInterface {{.+}} 'A'
anatofuz
parents:
diff changeset
96 // CHECK-NEXT: -ObjCProtocol {{.+}} 'P'
anatofuz
parents:
diff changeset
97 // CHECK-NEXT: -ObjCTypeParamDecl {{.+}} <col:33> col:33 T 'id':'id'
anatofuz
parents:
diff changeset
98
anatofuz
parents:
diff changeset
99 @implementation TestObjCClass (TestObjCCategoryDecl)
anatofuz
parents:
diff changeset
100 - (void) bar {
anatofuz
parents:
diff changeset
101 }
anatofuz
parents:
diff changeset
102 @end
anatofuz
parents:
diff changeset
103 // CHECK: ObjCCategoryImplDecl{{.*}} TestObjCCategoryDecl
anatofuz
parents:
diff changeset
104 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass'
anatofuz
parents:
diff changeset
105 // CHECK-NEXT: ObjCCategory{{.*}} 'TestObjCCategoryDecl'
anatofuz
parents:
diff changeset
106 // CHECK-NEXT: ObjCMethodDecl{{.*}} bar
anatofuz
parents:
diff changeset
107
anatofuz
parents:
diff changeset
108 @compatibility_alias TestObjCCompatibleAliasDecl A;
anatofuz
parents:
diff changeset
109 // CHECK: ObjCCompatibleAliasDecl{{.*}} TestObjCCompatibleAliasDecl
anatofuz
parents:
diff changeset
110 // CHECK-NEXT: ObjCInterface{{.*}} 'A'
anatofuz
parents:
diff changeset
111
anatofuz
parents:
diff changeset
112 @interface TestObjCProperty: A
anatofuz
parents:
diff changeset
113 @property(getter=getterFoo, setter=setterFoo:) int foo;
anatofuz
parents:
diff changeset
114 @property int bar;
anatofuz
parents:
diff changeset
115 @end
anatofuz
parents:
diff changeset
116 // CHECK: ObjCInterfaceDecl{{.*}} TestObjCProperty
anatofuz
parents:
diff changeset
117 // CHECK: ObjCPropertyDecl{{.*}} foo 'int' assign readwrite atomic unsafe_unretained
anatofuz
parents:
diff changeset
118 // CHECK-NEXT: getter ObjCMethod{{.*}} 'getterFoo'
anatofuz
parents:
diff changeset
119 // CHECK-NEXT: setter ObjCMethod{{.*}} 'setterFoo:'
anatofuz
parents:
diff changeset
120 // CHECK-NEXT: ObjCPropertyDecl{{.*}} bar 'int' assign readwrite atomic unsafe_unretained
anatofuz
parents:
diff changeset
121 // CHECK-NEXT: ObjCMethodDecl{{.*}} getterFoo
anatofuz
parents:
diff changeset
122 // CHECK-NEXT: ObjCMethodDecl{{.*}} setterFoo:
anatofuz
parents:
diff changeset
123 // CHECK-NEXT: ParmVarDecl{{.*}} foo
anatofuz
parents:
diff changeset
124 // CHECK-NEXT: ObjCMethodDecl{{.*}} bar
anatofuz
parents:
diff changeset
125 // CHECK-NEXT: ObjCMethodDecl{{.*}} setBar:
anatofuz
parents:
diff changeset
126 // CHECK-NEXT: ParmVarDecl{{.*}} bar
anatofuz
parents:
diff changeset
127
anatofuz
parents:
diff changeset
128 @implementation TestObjCProperty {
anatofuz
parents:
diff changeset
129 int i;
anatofuz
parents:
diff changeset
130 }
anatofuz
parents:
diff changeset
131 @synthesize foo=i;
anatofuz
parents:
diff changeset
132 @synthesize bar;
anatofuz
parents:
diff changeset
133 @end
anatofuz
parents:
diff changeset
134 // CHECK: ObjCImplementationDecl{{.*}} TestObjCProperty
anatofuz
parents:
diff changeset
135 // CHECK: ObjCPropertyImplDecl{{.*}} foo synthesize
anatofuz
parents:
diff changeset
136 // CHECK-NEXT: ObjCProperty{{.*}} 'foo'
anatofuz
parents:
diff changeset
137 // CHECK-NEXT: ObjCIvar{{.*}} 'i' 'int'
anatofuz
parents:
diff changeset
138 // CHECK-NEXT: ObjCIvarDecl{{.*}} bar 'int' synthesize private
anatofuz
parents:
diff changeset
139 // CHECK-NEXT: ObjCPropertyImplDecl{{.*}} bar synthesize
anatofuz
parents:
diff changeset
140 // CHECK-NEXT: ObjCProperty{{.*}} 'bar'
anatofuz
parents:
diff changeset
141 // CHECK-NEXT: ObjCIvar{{.*}} 'bar' 'int'
anatofuz
parents:
diff changeset
142
anatofuz
parents:
diff changeset
143 void TestBlockDecl(int x) {
anatofuz
parents:
diff changeset
144 ^(int y, ...){ x; };
anatofuz
parents:
diff changeset
145 }
anatofuz
parents:
diff changeset
146 // CHECK: FunctionDecl{{.*}}TestBlockDecl
anatofuz
parents:
diff changeset
147 // CHECK: BlockDecl {{.+}} <col:3, col:21> col:3 variadic
anatofuz
parents:
diff changeset
148 // CHECK-NEXT: ParmVarDecl{{.*}} y 'int'
anatofuz
parents:
diff changeset
149 // CHECK-NEXT: capture ParmVar{{.*}} 'x' 'int'
anatofuz
parents:
diff changeset
150 // CHECK-NEXT: CompoundStmt
anatofuz
parents:
diff changeset
151
anatofuz
parents:
diff changeset
152 @interface B
anatofuz
parents:
diff changeset
153 + (int) foo;
anatofuz
parents:
diff changeset
154 @end
anatofuz
parents:
diff changeset
155
anatofuz
parents:
diff changeset
156 void f() {
anatofuz
parents:
diff changeset
157 __typeof__(B.foo) Test;
anatofuz
parents:
diff changeset
158 }
anatofuz
parents:
diff changeset
159 // CHECK: VarDecl{{.*}}Test 'typeof (B.foo)':'int'