]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/AST/ast-dump-stmt.c
Vendor import of clang trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / test / AST / ast-dump-stmt.c
1 // RUN: %clang_cc1 -std=gnu11 -ast-dump %s | FileCheck -strict-whitespace %s
2
3 int TestLocation = 0;
4 // CHECK:      VarDecl{{.*}}TestLocation
5 // CHECK-NEXT:   IntegerLiteral 0x{{[^ ]*}} <col:20> 'int' 0
6
7 int TestIndent = 1 + (1);
8 // CHECK:      VarDecl{{.*}}TestIndent
9 // CHECK-NEXT: {{^}}| `-BinaryOperator{{[^()]*$}}
10 // CHECK-NEXT: {{^}}|   |-IntegerLiteral{{.*0[^()]*$}}
11 // CHECK-NEXT: {{^}}|   `-ParenExpr{{.*0[^()]*$}}
12 // CHECK-NEXT: {{^}}|     `-IntegerLiteral{{.*0[^()]*$}}
13
14 void TestDeclStmt() {
15   int x = 0;
16   int y, z;
17 }
18 // CHECK:      FunctionDecl{{.*}}TestDeclStmt
19 // CHECK-NEXT: CompoundStmt
20 // CHECK-NEXT:   DeclStmt
21 // CHECK-NEXT:     VarDecl{{.*}}x
22 // CHECK-NEXT:       IntegerLiteral
23 // CHECK-NEXT:   DeclStmt
24 // CHECK-NEXT:     VarDecl{{.*}}y
25 // CHECK-NEXT:     VarDecl{{.*}}z
26
27 int TestOpaqueValueExpr = 0 ?: 1;
28 // CHECK:      VarDecl{{.*}}TestOpaqueValueExpr
29 // CHECK-NEXT: BinaryConditionalOperator
30 // CHECK-NEXT:   IntegerLiteral
31 // CHECK-NEXT:   OpaqueValueExpr
32 // CHECK-NEXT:     IntegerLiteral
33 // CHECK-NEXT:   OpaqueValueExpr\r
34 // CHECK-NEXT:     IntegerLiteral\r
35 // CHECK-NEXT:   IntegerLiteral\r
36 \r
37 void TestUnaryOperatorExpr(void) {\r
38   char T1 = 1;\r
39   int T2 = 1;\r
40 \r
41   T1++;\r
42   T2++;\r
43   // CHECK:      UnaryOperator{{.*}}postfix '++' cannot overflow\r
44   // CHECK-NEXT:   DeclRefExpr{{.*}}'T1' 'char'\r
45   // CHECK-NOT:  UnaryOperator{{.*}}postfix '++' cannot overflow\r
46   // CHECK:        DeclRefExpr{{.*}}'T2' 'int'\r
47 \r
48   -T1;\r
49   -T2;\r
50   // CHECK:      UnaryOperator{{.*}}prefix '-' cannot overflow\r
51   // CHECK-NEXT:   ImplicitCastExpr\r
52   // CHECK-NEXT:     ImplicitCastExpr\r
53   // CHECK-NEXT:       DeclRefExpr{{.*}}'T1' 'char'\r
54   // CHECK-NOT:  UnaryOperator{{.*}}prefix '-' cannot overflow\r
55   // CHECK:        ImplicitCastExpr\r
56   // CHECK:          DeclRefExpr{{.*}}'T2' 'int'\r
57 \r
58   ~T1;\r
59   ~T2;\r
60   // CHECK:      UnaryOperator{{.*}}prefix '~' cannot overflow\r
61   // CHECK-NEXT:   ImplicitCastExpr\r
62   // CHECK-NEXT:     ImplicitCastExpr\r
63   // CHECK-NEXT:       DeclRefExpr{{.*}}'T1' 'char'\r
64   // CHECK:      UnaryOperator{{.*}}prefix '~' cannot overflow\r
65   // CHECK-NEXT:     ImplicitCastExpr\r
66   // CHECK-NEXT:       DeclRefExpr{{.*}}'T2' 'int'\r
67 }\r
68 \r
69 void TestGenericSelectionExpressions(int i) {\r
70   _Generic(i, int : 12);\r
71   // CHECK: GenericSelectionExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:23> 'int'\r
72   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}}\r
73   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int'\r
74   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
75   // FIXME: note that the following test line has a spurious whitespace.\r
76   // CHECK-NEXT: case  'int' selected\r
77   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
78   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:21> 'int' 12\r
79   _Generic(i, int : 12, default : 0);\r
80   // CHECK: GenericSelectionExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:36> 'int'\r
81   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}}\r
82   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int'\r
83   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
84   // FIXME: note that the following test line has a spurious whitespace.\r
85   // CHECK-NEXT: case  'int' selected\r
86   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
87   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:21> 'int' 12\r
88   // CHECK-NEXT: default\r
89   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:35> 'int' 0\r
90   _Generic(i, default : 0, int : 12);\r
91   // CHECK: GenericSelectionExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:36> 'int'\r
92   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}}\r
93   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int'\r
94   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
95   // CHECK-NEXT: default\r
96   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:25> 'int' 0\r
97   // FIXME: note that the following test line has a spurious whitespace.\r
98   // CHECK-NEXT: case  'int' selected\r
99   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
100   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:34> 'int' 12\r
101   _Generic(i, int : 12, float : 10, default : 100);\r
102   // CHECK: GenericSelectionExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:50> 'int'\r
103   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}}\r
104   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int'\r
105   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
106   // FIXME: note that the following test line has a spurious whitespace.\r
107   // CHECK-NEXT: case  'int' selected\r
108   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
109   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:21> 'int' 12\r
110   // FIXME: note that the following test line has a spurious whitespace.\r
111   // CHECK-NEXT: case  'float'\r
112   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'float'\r
113   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:33> 'int' 10\r
114   // CHECK-NEXT: default\r
115   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:47> 'int' 100\r
116 \r
117   int j = _Generic(i, int : 12);\r
118   // CHECK: DeclStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:32>\r
119   // CHECK-NEXT: VarDecl 0x{{[^ ]*}} <col:3, col:31> col:7 j 'int' cinit\r
120   // CHECK-NEXT: GenericSelectionExpr 0x{{[^ ]*}} <col:11, col:31> 'int'\r
121   // CHECK-NEXT: ImplicitCastExpr 0x{{[^ ]*}}\r
122   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:20> 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int'\r
123   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
124   // FIXME: note that the following test line has a spurious whitespace.\r
125   // CHECK-NEXT: case  'int' selected\r
126   // CHECK-NEXT: BuiltinType 0x{{[^ ]*}} 'int'\r
127   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:29> 'int' 12\r
128 }\r
129 \r
130 void TestLabelsAndGoto(void) {\r
131   // Note: case and default labels are handled by TestSwitch().\r
132 \r
133 label1:\r
134   ;\r
135   // CHECK: LabelStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:3> 'label1'\r
136   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <col:3>\r
137 \r
138   goto label2;\r
139   // CHECK-NEXT: GotoStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:8> 'label2' 0x{{[^ ]*}}\r
140 \r
141 label2:\r
142   0;\r
143   // CHECK-NEXT: LabelStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:1, line:[[@LINE-1]]:3> 'label2'\r
144   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:3> 'int' 0\r
145 \r
146   void *ptr = &&label1;\r
147   // CHECK-NEXT: DeclStmt\r
148   // CHECK-NEXT: VarDecl\r
149   // CHECK-NEXT: AddrLabelExpr 0x{{[^ ]*}} <col:15, col:17> 'void *' label1 0x{{[^ ]*}}\r
150 \r
151   goto *ptr;\r
152   // CHECK-NEXT: IndirectGotoStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:9>\r
153   // CHECK-NEXT: ImplicitCastExpr\r
154   // CHECK-NEXT: ImplicitCastExpr\r
155   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:9> 'void *' lvalue Var 0x{{[^ ]*}} 'ptr' 'void *'\r
156 }\r
157 \r
158 void TestSwitch(int i) {\r
159   switch (i) {\r
160   // CHECK: SwitchStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3, line:[[@LINE+32]]:3>\r
161   // CHECK-NEXT: ImplicitCastExpr\r
162   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:11> 'int' lvalue ParmVar 0x{{[^ ]*}} 'i' 'int'\r
163   // CHECK-NEXT: CompoundStmt 0x{{[^ ]*}} <col:14, line:[[@LINE+29]]:3>\r
164   case 0:\r
165     break;\r
166   // CHECK-NEXT: CaseStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
167   // CHECK-NEXT: ConstantExpr\r
168   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:8> 'int' 0\r
169   // CHECK-NEXT: BreakStmt 0x{{[^ ]*}} <line:[[@LINE-4]]:5>\r
170   case 1:\r
171   case 2:\r
172     break;\r
173   // CHECK-NEXT: CaseStmt 0x{{[^ ]*}} <line:[[@LINE-3]]:3, line:[[@LINE-1]]:5>\r
174   // CHECK-NEXT: ConstantExpr\r
175   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:8> 'int' 1\r
176   // CHECK-NEXT: CaseStmt 0x{{[^ ]*}} <line:[[@LINE-5]]:3, line:[[@LINE-4]]:5>\r
177   // CHECK-NEXT: ConstantExpr\r
178   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:8> 'int' 2\r
179   // CHECK-NEXT: BreakStmt 0x{{[^ ]*}} <line:[[@LINE-7]]:5>\r
180   default:\r
181     break;\r
182   // CHECK-NEXT: DefaultStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
183   // CHECK-NEXT: BreakStmt 0x{{[^ ]*}} <col:5>\r
184   case 3 ... 5:\r
185     break;\r
186   // CHECK-NEXT: CaseStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5> gnu_range\r
187   // CHECK-NEXT: ConstantExpr\r
188   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:8> 'int' 3\r
189   // CHECK-NEXT: ConstantExpr\r
190   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:14> 'int' 5\r
191   // CHECK-NEXT: BreakStmt 0x{{[^ ]*}} <line:[[@LINE-6]]:5>\r
192   }\r
193 }\r
194 \r
195 void TestIf(_Bool b) {\r
196   if (b)\r
197     ;\r
198   // CHECK: IfStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
199   // CHECK-NEXT: ImplicitCastExpr\r
200   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
201   // CHECK-NEXT: NullStmt\r
202 \r
203   if (b) {}\r
204   // CHECK: IfStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:11>\r
205   // CHECK-NEXT: ImplicitCastExpr\r
206   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
207   // CHECK-NEXT: CompoundStmt\r
208 \r
209   if (b)\r
210     ;\r
211   else\r
212     ;\r
213   // CHECK: IfStmt 0x{{[^ ]*}} <line:[[@LINE-4]]:3, line:[[@LINE-1]]:5> has_else\r
214   // CHECK-NEXT: ImplicitCastExpr\r
215   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
216   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-6]]:5>\r
217   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-5]]:5>\r
218 \r
219   if (b) {}\r
220   else {}\r
221   // CHECK: IfStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:9> has_else\r
222   // CHECK-NEXT: ImplicitCastExpr\r
223   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
224   // CHECK-NEXT: CompoundStmt 0x{{[^ ]*}} <col:10, col:11>\r
225   // CHECK-NEXT: CompoundStmt 0x{{[^ ]*}} <line:[[@LINE-5]]:8, col:9>\r
226 \r
227   if (b)\r
228     ;\r
229   else if (b)\r
230     ;\r
231   // CHECK: IfStmt 0x{{[^ ]*}} <line:[[@LINE-4]]:3, line:[[@LINE-1]]:5> has_else\r
232   // CHECK-NEXT: ImplicitCastExpr\r
233   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
234   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-6]]:5>\r
235   // CHECK-NEXT: IfStmt 0x{{[^ ]*}} <line:[[@LINE-6]]:8, line:[[@LINE-5]]:5>\r
236   // CHECK-NEXT: ImplicitCastExpr\r
237   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
238   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-8]]:5>\r
239 \r
240   if (b)\r
241     ;\r
242   else if (b)\r
243     ;\r
244   else\r
245     ;\r
246   // CHECK: IfStmt 0x{{[^ ]*}} <line:[[@LINE-6]]:3, line:[[@LINE-1]]:5> has_else\r
247   // CHECK-NEXT: ImplicitCastExpr\r
248   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:7> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
249   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-8]]:5>\r
250   // CHECK-NEXT: IfStmt 0x{{[^ ]*}} <line:[[@LINE-8]]:8, line:[[@LINE-5]]:5> has_else\r
251   // CHECK-NEXT: ImplicitCastExpr\r
252   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:12> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
253   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-10]]:5>\r
254   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-9]]:5>\r
255 }\r
256 \r
257 void TestIteration(_Bool b) {\r
258   while (b)\r
259     ;\r
260   // CHECK: WhileStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
261   // CHECK-NEXT: ImplicitCastExpr\r
262   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
263   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-4]]:5>\r
264 \r
265   do\r
266     ;\r
267   while (b);\r
268   // CHECK: DoStmt 0x{{[^ ]*}} <line:[[@LINE-3]]:3, line:[[@LINE-1]]:11>\r
269   // CHECK-NEXT: NullStmt 0x{{[^ ]*}} <line:[[@LINE-3]]:5>\r
270   // CHECK-NEXT: ImplicitCastExpr\r
271   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
272 \r
273   for (int i = 0; i < 10; ++i)\r
274     ;\r
275   // CHECK: ForStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
276   // CHECK-NEXT: DeclStmt\r
277   // CHECK-NEXT: VarDecl 0x{{[^ ]*}} <col:8, col:16> col:12 used i 'int' cinit\r
278   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:16> 'int' 0\r
279   // CHECK-NEXT: <<<NULL>>>\r
280   // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <col:19, col:23> 'int' '<'\r
281   // CHECK-NEXT: ImplicitCastExpr\r
282   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:19> 'int' lvalue Var 0x{{[^ ]*}} 'i' 'int'\r
283   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:23> 'int' 10\r
284   // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:27, col:29> 'int' prefix '++'\r
285   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:29> 'int' lvalue Var 0x{{[^ ]*}} 'i' 'int'\r
286   // CHECK-NEXT: NullStmt\r
287 \r
288   for (b; b; b)\r
289     ;\r
290   // CHECK: ForStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
291   // CHECK-NEXT: ImplicitCastExpr\r
292   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:8> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
293   // CHECK-NEXT: <<<NULL>>>\r
294   // CHECK-NEXT: ImplicitCastExpr\r
295   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:11> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
296   // CHECK-NEXT: ImplicitCastExpr\r
297   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:14> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
298   // CHECK-NEXT: NullStmt\r
299 \r
300   for (; b; b = !b)\r
301     ;\r
302   // CHECK: ForStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
303   // CHECK-NEXT: <<<NULL>>>\r
304   // CHECK-NEXT: <<<NULL>>>\r
305   // CHECK-NEXT: ImplicitCastExpr\r
306   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
307   // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <col:13, col:18> '_Bool' '='\r
308   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:13> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
309   // CHECK-NEXT: ImplicitCastExpr\r
310   // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:17, col:18> 'int' prefix '!' cannot overflow\r
311   // CHECK-NEXT: ImplicitCastExpr\r
312   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:18> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
313   // CHECK-NEXT: NullStmt\r
314 \r
315   for (; b;)\r
316     ;\r
317   // CHECK: ForStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
318   // CHECK-NEXT: <<<NULL>>>\r
319   // CHECK-NEXT: <<<NULL>>>\r
320   // CHECK-NEXT: ImplicitCastExpr\r
321   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:10> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
322   // CHECK-NEXT: <<<NULL>>>\r
323   // CHECK-NEXT: NullStmt\r
324 \r
325   for (;; b = !b)\r
326     ;\r
327   // CHECK: ForStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
328   // CHECK-NEXT: <<<NULL>>>\r
329   // CHECK-NEXT: <<<NULL>>>\r
330   // CHECK-NEXT: <<<NULL>>>\r
331   // CHECK-NEXT: BinaryOperator 0x{{[^ ]*}} <line:[[@LINE-6]]:11, col:16> '_Bool' '='\r
332   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:11> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
333   // CHECK-NEXT: ImplicitCastExpr\r
334   // CHECK-NEXT: UnaryOperator 0x{{[^ ]*}} <col:15, col:16> 'int' prefix '!' cannot overflow\r
335   // CHECK-NEXT: ImplicitCastExpr\r
336   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:16> '_Bool' lvalue ParmVar 0x{{[^ ]*}} 'b' '_Bool'\r
337   // CHECK-NEXT: NullStmt\r
338 \r
339   for (;;)\r
340     ;\r
341   // CHECK: ForStmt 0x{{[^ ]*}} <line:[[@LINE-2]]:3, line:[[@LINE-1]]:5>\r
342   // CHECK-NEXT: <<<NULL>>>\r
343   // CHECK-NEXT: <<<NULL>>>\r
344   // CHECK-NEXT: <<<NULL>>>\r
345   // CHECK-NEXT: <<<NULL>>>\r
346   // CHECK-NEXT: NullStmt\r
347 }\r
348 \r
349 void TestJumps(void) {\r
350   // goto and computed goto was tested in TestLabelsAndGoto().\r
351 \r
352   while (1) {\r
353     continue;\r
354     // CHECK: ContinueStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:5>\r
355     break;\r
356     // CHECK: BreakStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:5>\r
357   }\r
358   return;\r
359   // CHECK: ReturnStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3>\r
360 \r
361   return TestSwitch(1);\r
362   // CHECK: ReturnStmt 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:22>\r
363   // CHECK-NEXT: CallExpr 0x{{[^ ]*}} <col:10, col:22> 'void'\r
364 }\r
365 \r
366 void TestMiscStmts(void) {\r
367   ({int a = 10; a;});\r
368   // CHECK: StmtExpr 0x{{[^ ]*}} <line:[[@LINE-1]]:3, col:20> 'int'\r
369   // CHECK-NEXT: CompoundStmt\r
370   // CHECK-NEXT: DeclStmt\r
371   // CHECK-NEXT: VarDecl 0x{{[^ ]*}} <col:5, col:13> col:9 used a 'int' cinit\r
372   // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} <col:13> 'int' 10\r
373   // CHECK-NEXT: ImplicitCastExpr\r
374   // CHECK-NEXT: DeclRefExpr 0x{{[^ ]*}} <col:17> 'int' lvalue Var 0x{{[^ ]*}} 'a' 'int'\r
375 }\r