1 // RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++17 -ast-dump=json %s | FileCheck %s
2 
3 void func(int val) {
4   if (val)
5     ;
6 
7   if (val)
8     ;
9   else
10     ;
11 
12   if (val)
13     ;
14   else if (val)
15     ;
16   else
17     ;
18 
19   if constexpr(10 == 10)
20     ;
21 
22   if (int i = 12)
23     ;
24 
25   if (int i = 12; i)
26     ;
27 }
28 
29 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
30 // using --filters=IfStmt
31 
32 // CHECK:  "kind": "IfStmt",
33 // CHECK-NEXT:  "range": {
34 // CHECK-NEXT:   "begin": {
35 // CHECK-NEXT:    "offset": 111,
36 // CHECK-NEXT:    "line": 4,
37 // CHECK-NEXT:    "col": 3,
38 // CHECK-NEXT:    "tokLen": 2
39 // CHECK-NEXT:   },
40 // CHECK-NEXT:   "end": {
41 // CHECK-NEXT:    "offset": 124,
42 // CHECK-NEXT:    "line": 5,
43 // CHECK-NEXT:    "col": 5,
44 // CHECK-NEXT:    "tokLen": 1
45 // CHECK-NEXT:   }
46 // CHECK-NEXT:  },
47 // CHECK-NEXT:  "inner": [
48 // CHECK-NEXT:   {
49 // CHECK-NEXT:    "id": "0x{{.*}}",
50 // CHECK-NEXT:    "kind": "ImplicitCastExpr",
51 // CHECK-NEXT:    "range": {
52 // CHECK-NEXT:     "begin": {
53 // CHECK-NEXT:      "offset": 115,
54 // CHECK-NEXT:      "line": 4,
55 // CHECK-NEXT:      "col": 7,
56 // CHECK-NEXT:      "tokLen": 3
57 // CHECK-NEXT:     },
58 // CHECK-NEXT:     "end": {
59 // CHECK-NEXT:      "offset": 115,
60 // CHECK-NEXT:      "col": 7,
61 // CHECK-NEXT:      "tokLen": 3
62 // CHECK-NEXT:     }
63 // CHECK-NEXT:    },
64 // CHECK-NEXT:    "type": {
65 // CHECK-NEXT:     "qualType": "bool"
66 // CHECK-NEXT:    },
67 // CHECK-NEXT:    "valueCategory": "prvalue",
68 // CHECK-NEXT:    "castKind": "IntegralToBoolean",
69 // CHECK-NEXT:    "inner": [
70 // CHECK-NEXT:     {
71 // CHECK-NEXT:      "id": "0x{{.*}}",
72 // CHECK-NEXT:      "kind": "ImplicitCastExpr",
73 // CHECK-NEXT:      "range": {
74 // CHECK-NEXT:       "begin": {
75 // CHECK-NEXT:        "offset": 115,
76 // CHECK-NEXT:        "col": 7,
77 // CHECK-NEXT:        "tokLen": 3
78 // CHECK-NEXT:       },
79 // CHECK-NEXT:       "end": {
80 // CHECK-NEXT:        "offset": 115,
81 // CHECK-NEXT:        "col": 7,
82 // CHECK-NEXT:        "tokLen": 3
83 // CHECK-NEXT:       }
84 // CHECK-NEXT:      },
85 // CHECK-NEXT:      "type": {
86 // CHECK-NEXT:       "qualType": "int"
87 // CHECK-NEXT:      },
88 // CHECK-NEXT:      "valueCategory": "prvalue",
89 // CHECK-NEXT:      "castKind": "LValueToRValue",
90 // CHECK-NEXT:      "inner": [
91 // CHECK-NEXT:       {
92 // CHECK-NEXT:        "id": "0x{{.*}}",
93 // CHECK-NEXT:        "kind": "DeclRefExpr",
94 // CHECK-NEXT:        "range": {
95 // CHECK-NEXT:         "begin": {
96 // CHECK-NEXT:          "offset": 115,
97 // CHECK-NEXT:          "col": 7,
98 // CHECK-NEXT:          "tokLen": 3
99 // CHECK-NEXT:         },
100 // CHECK-NEXT:         "end": {
101 // CHECK-NEXT:          "offset": 115,
102 // CHECK-NEXT:          "col": 7,
103 // CHECK-NEXT:          "tokLen": 3
104 // CHECK-NEXT:         }
105 // CHECK-NEXT:        },
106 // CHECK-NEXT:        "type": {
107 // CHECK-NEXT:         "qualType": "int"
108 // CHECK-NEXT:        },
109 // CHECK-NEXT:        "valueCategory": "lvalue",
110 // CHECK-NEXT:        "referencedDecl": {
111 // CHECK-NEXT:         "id": "0x{{.*}}",
112 // CHECK-NEXT:         "kind": "ParmVarDecl",
113 // CHECK-NEXT:         "name": "val",
114 // CHECK-NEXT:         "type": {
115 // CHECK-NEXT:          "qualType": "int"
116 // CHECK-NEXT:         }
117 // CHECK-NEXT:        }
118 // CHECK-NEXT:       }
119 // CHECK-NEXT:      ]
120 // CHECK-NEXT:     }
121 // CHECK-NEXT:    ]
122 // CHECK-NEXT:   },
123 // CHECK-NEXT:   {
124 // CHECK-NEXT:    "id": "0x{{.*}}",
125 // CHECK-NEXT:    "kind": "NullStmt",
126 // CHECK-NEXT:    "range": {
127 // CHECK-NEXT:     "begin": {
128 // CHECK-NEXT:      "offset": 124,
129 // CHECK-NEXT:      "line": 5,
130 // CHECK-NEXT:      "col": 5,
131 // CHECK-NEXT:      "tokLen": 1
132 // CHECK-NEXT:     },
133 // CHECK-NEXT:     "end": {
134 // CHECK-NEXT:      "offset": 124,
135 // CHECK-NEXT:      "col": 5,
136 // CHECK-NEXT:      "tokLen": 1
137 // CHECK-NEXT:     }
138 // CHECK-NEXT:    }
139 // CHECK-NEXT:   }
140 // CHECK-NEXT:  ]
141 // CHECK-NEXT: }
142 
143 // CHECK:  "kind": "IfStmt",
144 // CHECK-NEXT:  "range": {
145 // CHECK-NEXT:   "begin": {
146 // CHECK-NEXT:    "offset": 129,
147 // CHECK-NEXT:    "line": 7,
148 // CHECK-NEXT:    "col": 3,
149 // CHECK-NEXT:    "tokLen": 2
150 // CHECK-NEXT:   },
151 // CHECK-NEXT:   "end": {
152 // CHECK-NEXT:    "offset": 155,
153 // CHECK-NEXT:    "line": 10,
154 // CHECK-NEXT:    "col": 5,
155 // CHECK-NEXT:    "tokLen": 1
156 // CHECK-NEXT:   }
157 // CHECK-NEXT:  },
158 // CHECK-NEXT:  "hasElse": true,
159 // CHECK-NEXT:  "inner": [
160 // CHECK-NEXT:   {
161 // CHECK-NEXT:    "id": "0x{{.*}}",
162 // CHECK-NEXT:    "kind": "ImplicitCastExpr",
163 // CHECK-NEXT:    "range": {
164 // CHECK-NEXT:     "begin": {
165 // CHECK-NEXT:      "offset": 133,
166 // CHECK-NEXT:      "line": 7,
167 // CHECK-NEXT:      "col": 7,
168 // CHECK-NEXT:      "tokLen": 3
169 // CHECK-NEXT:     },
170 // CHECK-NEXT:     "end": {
171 // CHECK-NEXT:      "offset": 133,
172 // CHECK-NEXT:      "col": 7,
173 // CHECK-NEXT:      "tokLen": 3
174 // CHECK-NEXT:     }
175 // CHECK-NEXT:    },
176 // CHECK-NEXT:    "type": {
177 // CHECK-NEXT:     "qualType": "bool"
178 // CHECK-NEXT:    },
179 // CHECK-NEXT:    "valueCategory": "prvalue",
180 // CHECK-NEXT:    "castKind": "IntegralToBoolean",
181 // CHECK-NEXT:    "inner": [
182 // CHECK-NEXT:     {
183 // CHECK-NEXT:      "id": "0x{{.*}}",
184 // CHECK-NEXT:      "kind": "ImplicitCastExpr",
185 // CHECK-NEXT:      "range": {
186 // CHECK-NEXT:       "begin": {
187 // CHECK-NEXT:        "offset": 133,
188 // CHECK-NEXT:        "col": 7,
189 // CHECK-NEXT:        "tokLen": 3
190 // CHECK-NEXT:       },
191 // CHECK-NEXT:       "end": {
192 // CHECK-NEXT:        "offset": 133,
193 // CHECK-NEXT:        "col": 7,
194 // CHECK-NEXT:        "tokLen": 3
195 // CHECK-NEXT:       }
196 // CHECK-NEXT:      },
197 // CHECK-NEXT:      "type": {
198 // CHECK-NEXT:       "qualType": "int"
199 // CHECK-NEXT:      },
200 // CHECK-NEXT:      "valueCategory": "prvalue",
201 // CHECK-NEXT:      "castKind": "LValueToRValue",
202 // CHECK-NEXT:      "inner": [
203 // CHECK-NEXT:       {
204 // CHECK-NEXT:        "id": "0x{{.*}}",
205 // CHECK-NEXT:        "kind": "DeclRefExpr",
206 // CHECK-NEXT:        "range": {
207 // CHECK-NEXT:         "begin": {
208 // CHECK-NEXT:          "offset": 133,
209 // CHECK-NEXT:          "col": 7,
210 // CHECK-NEXT:          "tokLen": 3
211 // CHECK-NEXT:         },
212 // CHECK-NEXT:         "end": {
213 // CHECK-NEXT:          "offset": 133,
214 // CHECK-NEXT:          "col": 7,
215 // CHECK-NEXT:          "tokLen": 3
216 // CHECK-NEXT:         }
217 // CHECK-NEXT:        },
218 // CHECK-NEXT:        "type": {
219 // CHECK-NEXT:         "qualType": "int"
220 // CHECK-NEXT:        },
221 // CHECK-NEXT:        "valueCategory": "lvalue",
222 // CHECK-NEXT:        "referencedDecl": {
223 // CHECK-NEXT:         "id": "0x{{.*}}",
224 // CHECK-NEXT:         "kind": "ParmVarDecl",
225 // CHECK-NEXT:         "name": "val",
226 // CHECK-NEXT:         "type": {
227 // CHECK-NEXT:          "qualType": "int"
228 // CHECK-NEXT:         }
229 // CHECK-NEXT:        }
230 // CHECK-NEXT:       }
231 // CHECK-NEXT:      ]
232 // CHECK-NEXT:     }
233 // CHECK-NEXT:    ]
234 // CHECK-NEXT:   },
235 // CHECK-NEXT:   {
236 // CHECK-NEXT:    "id": "0x{{.*}}",
237 // CHECK-NEXT:    "kind": "NullStmt",
238 // CHECK-NEXT:    "range": {
239 // CHECK-NEXT:     "begin": {
240 // CHECK-NEXT:      "offset": 142,
241 // CHECK-NEXT:      "line": 8,
242 // CHECK-NEXT:      "col": 5,
243 // CHECK-NEXT:      "tokLen": 1
244 // CHECK-NEXT:     },
245 // CHECK-NEXT:     "end": {
246 // CHECK-NEXT:      "offset": 142,
247 // CHECK-NEXT:      "col": 5,
248 // CHECK-NEXT:      "tokLen": 1
249 // CHECK-NEXT:     }
250 // CHECK-NEXT:    }
251 // CHECK-NEXT:   },
252 // CHECK-NEXT:   {
253 // CHECK-NEXT:    "id": "0x{{.*}}",
254 // CHECK-NEXT:    "kind": "NullStmt",
255 // CHECK-NEXT:    "range": {
256 // CHECK-NEXT:     "begin": {
257 // CHECK-NEXT:      "offset": 155,
258 // CHECK-NEXT:      "line": 10,
259 // CHECK-NEXT:      "col": 5,
260 // CHECK-NEXT:      "tokLen": 1
261 // CHECK-NEXT:     },
262 // CHECK-NEXT:     "end": {
263 // CHECK-NEXT:      "offset": 155,
264 // CHECK-NEXT:      "col": 5,
265 // CHECK-NEXT:      "tokLen": 1
266 // CHECK-NEXT:     }
267 // CHECK-NEXT:    }
268 // CHECK-NEXT:   }
269 // CHECK-NEXT:  ]
270 // CHECK-NEXT: }
271 
272 // CHECK:  "kind": "IfStmt",
273 // CHECK-NEXT:  "range": {
274 // CHECK-NEXT:   "begin": {
275 // CHECK-NEXT:    "offset": 160,
276 // CHECK-NEXT:    "line": 12,
277 // CHECK-NEXT:    "col": 3,
278 // CHECK-NEXT:    "tokLen": 2
279 // CHECK-NEXT:   },
280 // CHECK-NEXT:   "end": {
281 // CHECK-NEXT:    "offset": 208,
282 // CHECK-NEXT:    "line": 17,
283 // CHECK-NEXT:    "col": 5,
284 // CHECK-NEXT:    "tokLen": 1
285 // CHECK-NEXT:   }
286 // CHECK-NEXT:  },
287 // CHECK-NEXT:  "hasElse": true,
288 // CHECK-NEXT:  "inner": [
289 // CHECK-NEXT:   {
290 // CHECK-NEXT:    "id": "0x{{.*}}",
291 // CHECK-NEXT:    "kind": "ImplicitCastExpr",
292 // CHECK-NEXT:    "range": {
293 // CHECK-NEXT:     "begin": {
294 // CHECK-NEXT:      "offset": 164,
295 // CHECK-NEXT:      "line": 12,
296 // CHECK-NEXT:      "col": 7,
297 // CHECK-NEXT:      "tokLen": 3
298 // CHECK-NEXT:     },
299 // CHECK-NEXT:     "end": {
300 // CHECK-NEXT:      "offset": 164,
301 // CHECK-NEXT:      "col": 7,
302 // CHECK-NEXT:      "tokLen": 3
303 // CHECK-NEXT:     }
304 // CHECK-NEXT:    },
305 // CHECK-NEXT:    "type": {
306 // CHECK-NEXT:     "qualType": "bool"
307 // CHECK-NEXT:    },
308 // CHECK-NEXT:    "valueCategory": "prvalue",
309 // CHECK-NEXT:    "castKind": "IntegralToBoolean",
310 // CHECK-NEXT:    "inner": [
311 // CHECK-NEXT:     {
312 // CHECK-NEXT:      "id": "0x{{.*}}",
313 // CHECK-NEXT:      "kind": "ImplicitCastExpr",
314 // CHECK-NEXT:      "range": {
315 // CHECK-NEXT:       "begin": {
316 // CHECK-NEXT:        "offset": 164,
317 // CHECK-NEXT:        "col": 7,
318 // CHECK-NEXT:        "tokLen": 3
319 // CHECK-NEXT:       },
320 // CHECK-NEXT:       "end": {
321 // CHECK-NEXT:        "offset": 164,
322 // CHECK-NEXT:        "col": 7,
323 // CHECK-NEXT:        "tokLen": 3
324 // CHECK-NEXT:       }
325 // CHECK-NEXT:      },
326 // CHECK-NEXT:      "type": {
327 // CHECK-NEXT:       "qualType": "int"
328 // CHECK-NEXT:      },
329 // CHECK-NEXT:      "valueCategory": "prvalue",
330 // CHECK-NEXT:      "castKind": "LValueToRValue",
331 // CHECK-NEXT:      "inner": [
332 // CHECK-NEXT:       {
333 // CHECK-NEXT:        "id": "0x{{.*}}",
334 // CHECK-NEXT:        "kind": "DeclRefExpr",
335 // CHECK-NEXT:        "range": {
336 // CHECK-NEXT:         "begin": {
337 // CHECK-NEXT:          "offset": 164,
338 // CHECK-NEXT:          "col": 7,
339 // CHECK-NEXT:          "tokLen": 3
340 // CHECK-NEXT:         },
341 // CHECK-NEXT:         "end": {
342 // CHECK-NEXT:          "offset": 164,
343 // CHECK-NEXT:          "col": 7,
344 // CHECK-NEXT:          "tokLen": 3
345 // CHECK-NEXT:         }
346 // CHECK-NEXT:        },
347 // CHECK-NEXT:        "type": {
348 // CHECK-NEXT:         "qualType": "int"
349 // CHECK-NEXT:        },
350 // CHECK-NEXT:        "valueCategory": "lvalue",
351 // CHECK-NEXT:        "referencedDecl": {
352 // CHECK-NEXT:         "id": "0x{{.*}}",
353 // CHECK-NEXT:         "kind": "ParmVarDecl",
354 // CHECK-NEXT:         "name": "val",
355 // CHECK-NEXT:         "type": {
356 // CHECK-NEXT:          "qualType": "int"
357 // CHECK-NEXT:         }
358 // CHECK-NEXT:        }
359 // CHECK-NEXT:       }
360 // CHECK-NEXT:      ]
361 // CHECK-NEXT:     }
362 // CHECK-NEXT:    ]
363 // CHECK-NEXT:   },
364 // CHECK-NEXT:   {
365 // CHECK-NEXT:    "id": "0x{{.*}}",
366 // CHECK-NEXT:    "kind": "NullStmt",
367 // CHECK-NEXT:    "range": {
368 // CHECK-NEXT:     "begin": {
369 // CHECK-NEXT:      "offset": 173,
370 // CHECK-NEXT:      "line": 13,
371 // CHECK-NEXT:      "col": 5,
372 // CHECK-NEXT:      "tokLen": 1
373 // CHECK-NEXT:     },
374 // CHECK-NEXT:     "end": {
375 // CHECK-NEXT:      "offset": 173,
376 // CHECK-NEXT:      "col": 5,
377 // CHECK-NEXT:      "tokLen": 1
378 // CHECK-NEXT:     }
379 // CHECK-NEXT:    }
380 // CHECK-NEXT:   },
381 // CHECK-NEXT:   {
382 // CHECK-NEXT:    "id": "0x{{.*}}",
383 // CHECK-NEXT:    "kind": "IfStmt",
384 // CHECK-NEXT:    "range": {
385 // CHECK-NEXT:     "begin": {
386 // CHECK-NEXT:      "offset": 182,
387 // CHECK-NEXT:      "line": 14,
388 // CHECK-NEXT:      "col": 8,
389 // CHECK-NEXT:      "tokLen": 2
390 // CHECK-NEXT:     },
391 // CHECK-NEXT:     "end": {
392 // CHECK-NEXT:      "offset": 208,
393 // CHECK-NEXT:      "line": 17,
394 // CHECK-NEXT:      "col": 5,
395 // CHECK-NEXT:      "tokLen": 1
396 // CHECK-NEXT:     }
397 // CHECK-NEXT:    },
398 // CHECK-NEXT:    "hasElse": true,
399 // CHECK-NEXT:    "inner": [
400 // CHECK-NEXT:     {
401 // CHECK-NEXT:      "id": "0x{{.*}}",
402 // CHECK-NEXT:      "kind": "ImplicitCastExpr",
403 // CHECK-NEXT:      "range": {
404 // CHECK-NEXT:       "begin": {
405 // CHECK-NEXT:        "offset": 186,
406 // CHECK-NEXT:        "line": 14,
407 // CHECK-NEXT:        "col": 12,
408 // CHECK-NEXT:        "tokLen": 3
409 // CHECK-NEXT:       },
410 // CHECK-NEXT:       "end": {
411 // CHECK-NEXT:        "offset": 186,
412 // CHECK-NEXT:        "col": 12,
413 // CHECK-NEXT:        "tokLen": 3
414 // CHECK-NEXT:       }
415 // CHECK-NEXT:      },
416 // CHECK-NEXT:      "type": {
417 // CHECK-NEXT:       "qualType": "bool"
418 // CHECK-NEXT:      },
419 // CHECK-NEXT:      "valueCategory": "prvalue",
420 // CHECK-NEXT:      "castKind": "IntegralToBoolean",
421 // CHECK-NEXT:      "inner": [
422 // CHECK-NEXT:       {
423 // CHECK-NEXT:        "id": "0x{{.*}}",
424 // CHECK-NEXT:        "kind": "ImplicitCastExpr",
425 // CHECK-NEXT:        "range": {
426 // CHECK-NEXT:         "begin": {
427 // CHECK-NEXT:          "offset": 186,
428 // CHECK-NEXT:          "col": 12,
429 // CHECK-NEXT:          "tokLen": 3
430 // CHECK-NEXT:         },
431 // CHECK-NEXT:         "end": {
432 // CHECK-NEXT:          "offset": 186,
433 // CHECK-NEXT:          "col": 12,
434 // CHECK-NEXT:          "tokLen": 3
435 // CHECK-NEXT:         }
436 // CHECK-NEXT:        },
437 // CHECK-NEXT:        "type": {
438 // CHECK-NEXT:         "qualType": "int"
439 // CHECK-NEXT:        },
440 // CHECK-NEXT:        "valueCategory": "prvalue",
441 // CHECK-NEXT:        "castKind": "LValueToRValue",
442 // CHECK-NEXT:        "inner": [
443 // CHECK-NEXT:         {
444 // CHECK-NEXT:          "id": "0x{{.*}}",
445 // CHECK-NEXT:          "kind": "DeclRefExpr",
446 // CHECK-NEXT:          "range": {
447 // CHECK-NEXT:           "begin": {
448 // CHECK-NEXT:            "offset": 186,
449 // CHECK-NEXT:            "col": 12,
450 // CHECK-NEXT:            "tokLen": 3
451 // CHECK-NEXT:           },
452 // CHECK-NEXT:           "end": {
453 // CHECK-NEXT:            "offset": 186,
454 // CHECK-NEXT:            "col": 12,
455 // CHECK-NEXT:            "tokLen": 3
456 // CHECK-NEXT:           }
457 // CHECK-NEXT:          },
458 // CHECK-NEXT:          "type": {
459 // CHECK-NEXT:           "qualType": "int"
460 // CHECK-NEXT:          },
461 // CHECK-NEXT:          "valueCategory": "lvalue",
462 // CHECK-NEXT:          "referencedDecl": {
463 // CHECK-NEXT:           "id": "0x{{.*}}",
464 // CHECK-NEXT:           "kind": "ParmVarDecl",
465 // CHECK-NEXT:           "name": "val",
466 // CHECK-NEXT:           "type": {
467 // CHECK-NEXT:            "qualType": "int"
468 // CHECK-NEXT:           }
469 // CHECK-NEXT:          }
470 // CHECK-NEXT:         }
471 // CHECK-NEXT:        ]
472 // CHECK-NEXT:       }
473 // CHECK-NEXT:      ]
474 // CHECK-NEXT:     },
475 // CHECK-NEXT:     {
476 // CHECK-NEXT:      "id": "0x{{.*}}",
477 // CHECK-NEXT:      "kind": "NullStmt",
478 // CHECK-NEXT:      "range": {
479 // CHECK-NEXT:       "begin": {
480 // CHECK-NEXT:        "offset": 195,
481 // CHECK-NEXT:        "line": 15,
482 // CHECK-NEXT:        "col": 5,
483 // CHECK-NEXT:        "tokLen": 1
484 // CHECK-NEXT:       },
485 // CHECK-NEXT:       "end": {
486 // CHECK-NEXT:        "offset": 195,
487 // CHECK-NEXT:        "col": 5,
488 // CHECK-NEXT:        "tokLen": 1
489 // CHECK-NEXT:       }
490 // CHECK-NEXT:      }
491 // CHECK-NEXT:     },
492 // CHECK-NEXT:     {
493 // CHECK-NEXT:      "id": "0x{{.*}}",
494 // CHECK-NEXT:      "kind": "NullStmt",
495 // CHECK-NEXT:      "range": {
496 // CHECK-NEXT:       "begin": {
497 // CHECK-NEXT:        "offset": 208,
498 // CHECK-NEXT:        "line": 17,
499 // CHECK-NEXT:        "col": 5,
500 // CHECK-NEXT:        "tokLen": 1
501 // CHECK-NEXT:       },
502 // CHECK-NEXT:       "end": {
503 // CHECK-NEXT:        "offset": 208,
504 // CHECK-NEXT:        "col": 5,
505 // CHECK-NEXT:        "tokLen": 1
506 // CHECK-NEXT:       }
507 // CHECK-NEXT:      }
508 // CHECK-NEXT:     }
509 // CHECK-NEXT:    ]
510 // CHECK-NEXT:   }
511 // CHECK-NEXT:  ]
512 // CHECK-NEXT: }
513 
514 // CHECK:  "kind": "IfStmt",
515 // CHECK-NEXT:  "range": {
516 // CHECK-NEXT:   "begin": {
517 // CHECK-NEXT:    "offset": 213,
518 // CHECK-NEXT:    "line": 19,
519 // CHECK-NEXT:    "col": 3,
520 // CHECK-NEXT:    "tokLen": 2
521 // CHECK-NEXT:   },
522 // CHECK-NEXT:   "end": {
523 // CHECK-NEXT:    "offset": 240,
524 // CHECK-NEXT:    "line": 20,
525 // CHECK-NEXT:    "col": 5,
526 // CHECK-NEXT:    "tokLen": 1
527 // CHECK-NEXT:   }
528 // CHECK-NEXT:  },
529 // CHECK-NEXT:  "isConstexpr": true,
530 // CHECK-NEXT:  "inner": [
531 // CHECK-NEXT:   {
532 // CHECK-NEXT:    "id": "0x{{.*}}",
533 // CHECK-NEXT:    "kind": "ConstantExpr",
534 // CHECK-NEXT:    "range": {
535 // CHECK-NEXT:     "begin": {
536 // CHECK-NEXT:      "offset": 226,
537 // CHECK-NEXT:      "line": 19,
538 // CHECK-NEXT:      "col": 16,
539 // CHECK-NEXT:      "tokLen": 2
540 // CHECK-NEXT:     },
541 // CHECK-NEXT:     "end": {
542 // CHECK-NEXT:      "offset": 232,
543 // CHECK-NEXT:      "col": 22,
544 // CHECK-NEXT:      "tokLen": 2
545 // CHECK-NEXT:     }
546 // CHECK-NEXT:    },
547 // CHECK-NEXT:    "type": {
548 // CHECK-NEXT:     "qualType": "bool"
549 // CHECK-NEXT:    },
550 // CHECK-NEXT:    "valueCategory": "prvalue",
551 // CHECK-NEXT:    "value": "true",
552 // CHECK-NEXT:    "inner": [
553 // CHECK-NEXT:     {
554 // CHECK-NEXT:      "id": "0x{{.*}}",
555 // CHECK-NEXT:      "kind": "BinaryOperator",
556 // CHECK-NEXT:      "range": {
557 // CHECK-NEXT:       "begin": {
558 // CHECK-NEXT:        "offset": 226,
559 // CHECK-NEXT:        "col": 16,
560 // CHECK-NEXT:        "tokLen": 2
561 // CHECK-NEXT:       },
562 // CHECK-NEXT:       "end": {
563 // CHECK-NEXT:        "offset": 232,
564 // CHECK-NEXT:        "col": 22,
565 // CHECK-NEXT:        "tokLen": 2
566 // CHECK-NEXT:       }
567 // CHECK-NEXT:      },
568 // CHECK-NEXT:      "type": {
569 // CHECK-NEXT:       "qualType": "bool"
570 // CHECK-NEXT:      },
571 // CHECK-NEXT:      "valueCategory": "prvalue",
572 // CHECK-NEXT:      "opcode": "==",
573 // CHECK-NEXT:      "inner": [
574 // CHECK-NEXT:       {
575 // CHECK-NEXT:        "id": "0x{{.*}}",
576 // CHECK-NEXT:        "kind": "IntegerLiteral",
577 // CHECK-NEXT:        "range": {
578 // CHECK-NEXT:         "begin": {
579 // CHECK-NEXT:          "offset": 226,
580 // CHECK-NEXT:          "col": 16,
581 // CHECK-NEXT:          "tokLen": 2
582 // CHECK-NEXT:         },
583 // CHECK-NEXT:         "end": {
584 // CHECK-NEXT:          "offset": 226,
585 // CHECK-NEXT:          "col": 16,
586 // CHECK-NEXT:          "tokLen": 2
587 // CHECK-NEXT:         }
588 // CHECK-NEXT:        },
589 // CHECK-NEXT:        "type": {
590 // CHECK-NEXT:         "qualType": "int"
591 // CHECK-NEXT:        },
592 // CHECK-NEXT:        "valueCategory": "prvalue",
593 // CHECK-NEXT:        "value": "10"
594 // CHECK-NEXT:       },
595 // CHECK-NEXT:       {
596 // CHECK-NEXT:        "id": "0x{{.*}}",
597 // CHECK-NEXT:        "kind": "IntegerLiteral",
598 // CHECK-NEXT:        "range": {
599 // CHECK-NEXT:         "begin": {
600 // CHECK-NEXT:          "offset": 232,
601 // CHECK-NEXT:          "col": 22,
602 // CHECK-NEXT:          "tokLen": 2
603 // CHECK-NEXT:         },
604 // CHECK-NEXT:         "end": {
605 // CHECK-NEXT:          "offset": 232,
606 // CHECK-NEXT:          "col": 22,
607 // CHECK-NEXT:          "tokLen": 2
608 // CHECK-NEXT:         }
609 // CHECK-NEXT:        },
610 // CHECK-NEXT:        "type": {
611 // CHECK-NEXT:         "qualType": "int"
612 // CHECK-NEXT:        },
613 // CHECK-NEXT:        "valueCategory": "prvalue",
614 // CHECK-NEXT:        "value": "10"
615 // CHECK-NEXT:       }
616 // CHECK-NEXT:      ]
617 // CHECK-NEXT:     }
618 // CHECK-NEXT:    ]
619 // CHECK-NEXT:   },
620 // CHECK-NEXT:   {
621 // CHECK-NEXT:    "id": "0x{{.*}}",
622 // CHECK-NEXT:    "kind": "NullStmt",
623 // CHECK-NEXT:    "range": {
624 // CHECK-NEXT:     "begin": {
625 // CHECK-NEXT:      "offset": 240,
626 // CHECK-NEXT:      "line": 20,
627 // CHECK-NEXT:      "col": 5,
628 // CHECK-NEXT:      "tokLen": 1
629 // CHECK-NEXT:     },
630 // CHECK-NEXT:     "end": {
631 // CHECK-NEXT:      "offset": 240,
632 // CHECK-NEXT:      "col": 5,
633 // CHECK-NEXT:      "tokLen": 1
634 // CHECK-NEXT:     }
635 // CHECK-NEXT:    }
636 // CHECK-NEXT:   }
637 // CHECK-NEXT:  ]
638 // CHECK-NEXT: }
639 
640 // CHECK:  "kind": "IfStmt",
641 // CHECK-NEXT:  "range": {
642 // CHECK-NEXT:   "begin": {
643 // CHECK-NEXT:    "offset": 245,
644 // CHECK-NEXT:    "line": 22,
645 // CHECK-NEXT:    "col": 3,
646 // CHECK-NEXT:    "tokLen": 2
647 // CHECK-NEXT:   },
648 // CHECK-NEXT:   "end": {
649 // CHECK-NEXT:    "offset": 265,
650 // CHECK-NEXT:    "line": 23,
651 // CHECK-NEXT:    "col": 5,
652 // CHECK-NEXT:    "tokLen": 1
653 // CHECK-NEXT:   }
654 // CHECK-NEXT:  },
655 // CHECK-NEXT:  "hasVar": true,
656 // CHECK-NEXT:  "inner": [
657 // CHECK-NEXT:   {
658 // CHECK-NEXT:    "id": "0x{{.*}}",
659 // CHECK-NEXT:    "kind": "DeclStmt",
660 // CHECK-NEXT:    "range": {
661 // CHECK-NEXT:     "begin": {
662 // CHECK-NEXT:      "offset": 249,
663 // CHECK-NEXT:      "line": 22,
664 // CHECK-NEXT:      "col": 7,
665 // CHECK-NEXT:      "tokLen": 3
666 // CHECK-NEXT:     },
667 // CHECK-NEXT:     "end": {
668 // CHECK-NEXT:      "offset": 257,
669 // CHECK-NEXT:      "col": 15,
670 // CHECK-NEXT:      "tokLen": 2
671 // CHECK-NEXT:     }
672 // CHECK-NEXT:    },
673 // CHECK-NEXT:    "inner": [
674 // CHECK-NEXT:     {
675 // CHECK-NEXT:      "id": "0x{{.*}}",
676 // CHECK-NEXT:      "kind": "VarDecl",
677 // CHECK-NEXT:      "loc": {
678 // CHECK-NEXT:       "offset": 253,
679 // CHECK-NEXT:       "col": 11,
680 // CHECK-NEXT:       "tokLen": 1
681 // CHECK-NEXT:      },
682 // CHECK-NEXT:      "range": {
683 // CHECK-NEXT:       "begin": {
684 // CHECK-NEXT:        "offset": 249,
685 // CHECK-NEXT:        "col": 7,
686 // CHECK-NEXT:        "tokLen": 3
687 // CHECK-NEXT:       },
688 // CHECK-NEXT:       "end": {
689 // CHECK-NEXT:        "offset": 257,
690 // CHECK-NEXT:        "col": 15,
691 // CHECK-NEXT:        "tokLen": 2
692 // CHECK-NEXT:       }
693 // CHECK-NEXT:      },
694 // CHECK-NEXT:      "isUsed": true,
695 // CHECK-NEXT:      "name": "i",
696 // CHECK-NEXT:      "mangledName": "_ZZ4funciE1i",
697 // CHECK-NEXT:      "type": {
698 // CHECK-NEXT:       "qualType": "int"
699 // CHECK-NEXT:      },
700 // CHECK-NEXT:      "init": "c",
701 // CHECK-NEXT:      "inner": [
702 // CHECK-NEXT:       {
703 // CHECK-NEXT:        "id": "0x{{.*}}",
704 // CHECK-NEXT:        "kind": "IntegerLiteral",
705 // CHECK-NEXT:        "range": {
706 // CHECK-NEXT:         "begin": {
707 // CHECK-NEXT:          "offset": 257,
708 // CHECK-NEXT:          "col": 15,
709 // CHECK-NEXT:          "tokLen": 2
710 // CHECK-NEXT:         },
711 // CHECK-NEXT:         "end": {
712 // CHECK-NEXT:          "offset": 257,
713 // CHECK-NEXT:          "col": 15,
714 // CHECK-NEXT:          "tokLen": 2
715 // CHECK-NEXT:         }
716 // CHECK-NEXT:        },
717 // CHECK-NEXT:        "type": {
718 // CHECK-NEXT:         "qualType": "int"
719 // CHECK-NEXT:        },
720 // CHECK-NEXT:        "valueCategory": "prvalue",
721 // CHECK-NEXT:        "value": "12"
722 // CHECK-NEXT:       }
723 // CHECK-NEXT:      ]
724 // CHECK-NEXT:     }
725 // CHECK-NEXT:    ]
726 // CHECK-NEXT:   },
727 // CHECK-NEXT:   {
728 // CHECK-NEXT:    "id": "0x{{.*}}",
729 // CHECK-NEXT:    "kind": "ImplicitCastExpr",
730 // CHECK-NEXT:    "range": {
731 // CHECK-NEXT:     "begin": {
732 // CHECK-NEXT:      "offset": 253,
733 // CHECK-NEXT:      "col": 11,
734 // CHECK-NEXT:      "tokLen": 1
735 // CHECK-NEXT:     },
736 // CHECK-NEXT:     "end": {
737 // CHECK-NEXT:      "offset": 253,
738 // CHECK-NEXT:      "col": 11,
739 // CHECK-NEXT:      "tokLen": 1
740 // CHECK-NEXT:     }
741 // CHECK-NEXT:    },
742 // CHECK-NEXT:    "type": {
743 // CHECK-NEXT:     "qualType": "bool"
744 // CHECK-NEXT:    },
745 // CHECK-NEXT:    "valueCategory": "prvalue",
746 // CHECK-NEXT:    "castKind": "IntegralToBoolean",
747 // CHECK-NEXT:    "inner": [
748 // CHECK-NEXT:     {
749 // CHECK-NEXT:      "id": "0x{{.*}}",
750 // CHECK-NEXT:      "kind": "ImplicitCastExpr",
751 // CHECK-NEXT:      "range": {
752 // CHECK-NEXT:       "begin": {
753 // CHECK-NEXT:        "offset": 253,
754 // CHECK-NEXT:        "col": 11,
755 // CHECK-NEXT:        "tokLen": 1
756 // CHECK-NEXT:       },
757 // CHECK-NEXT:       "end": {
758 // CHECK-NEXT:        "offset": 253,
759 // CHECK-NEXT:        "col": 11,
760 // CHECK-NEXT:        "tokLen": 1
761 // CHECK-NEXT:       }
762 // CHECK-NEXT:      },
763 // CHECK-NEXT:      "type": {
764 // CHECK-NEXT:       "qualType": "int"
765 // CHECK-NEXT:      },
766 // CHECK-NEXT:      "valueCategory": "prvalue",
767 // CHECK-NEXT:      "castKind": "LValueToRValue",
768 // CHECK-NEXT:      "inner": [
769 // CHECK-NEXT:       {
770 // CHECK-NEXT:        "id": "0x{{.*}}",
771 // CHECK-NEXT:        "kind": "DeclRefExpr",
772 // CHECK-NEXT:        "range": {
773 // CHECK-NEXT:         "begin": {
774 // CHECK-NEXT:          "offset": 253,
775 // CHECK-NEXT:          "col": 11,
776 // CHECK-NEXT:          "tokLen": 1
777 // CHECK-NEXT:         },
778 // CHECK-NEXT:         "end": {
779 // CHECK-NEXT:          "offset": 253,
780 // CHECK-NEXT:          "col": 11,
781 // CHECK-NEXT:          "tokLen": 1
782 // CHECK-NEXT:         }
783 // CHECK-NEXT:        },
784 // CHECK-NEXT:        "type": {
785 // CHECK-NEXT:         "qualType": "int"
786 // CHECK-NEXT:        },
787 // CHECK-NEXT:        "valueCategory": "lvalue",
788 // CHECK-NEXT:        "referencedDecl": {
789 // CHECK-NEXT:         "id": "0x{{.*}}",
790 // CHECK-NEXT:         "kind": "VarDecl",
791 // CHECK-NEXT:         "name": "i",
792 // CHECK-NEXT:         "type": {
793 // CHECK-NEXT:          "qualType": "int"
794 // CHECK-NEXT:         }
795 // CHECK-NEXT:        }
796 // CHECK-NEXT:       }
797 // CHECK-NEXT:      ]
798 // CHECK-NEXT:     }
799 // CHECK-NEXT:    ]
800 // CHECK-NEXT:   },
801 // CHECK-NEXT:   {
802 // CHECK-NEXT:    "id": "0x{{.*}}",
803 // CHECK-NEXT:    "kind": "NullStmt",
804 // CHECK-NEXT:    "range": {
805 // CHECK-NEXT:     "begin": {
806 // CHECK-NEXT:      "offset": 265,
807 // CHECK-NEXT:      "line": 23,
808 // CHECK-NEXT:      "col": 5,
809 // CHECK-NEXT:      "tokLen": 1
810 // CHECK-NEXT:     },
811 // CHECK-NEXT:     "end": {
812 // CHECK-NEXT:      "offset": 265,
813 // CHECK-NEXT:      "col": 5,
814 // CHECK-NEXT:      "tokLen": 1
815 // CHECK-NEXT:     }
816 // CHECK-NEXT:    }
817 // CHECK-NEXT:   }
818 // CHECK-NEXT:  ]
819 // CHECK-NEXT: }
820 
821 // CHECK:  "kind": "IfStmt",
822 // CHECK-NEXT:  "range": {
823 // CHECK-NEXT:   "begin": {
824 // CHECK-NEXT:    "offset": 270,
825 // CHECK-NEXT:    "line": 25,
826 // CHECK-NEXT:    "col": 3,
827 // CHECK-NEXT:    "tokLen": 2
828 // CHECK-NEXT:   },
829 // CHECK-NEXT:   "end": {
830 // CHECK-NEXT:    "offset": 293,
831 // CHECK-NEXT:    "line": 26,
832 // CHECK-NEXT:    "col": 5,
833 // CHECK-NEXT:    "tokLen": 1
834 // CHECK-NEXT:   }
835 // CHECK-NEXT:  },
836 // CHECK-NEXT:  "hasInit": true,
837 // CHECK-NEXT:  "inner": [
838 // CHECK-NEXT:   {
839 // CHECK-NEXT:    "id": "0x{{.*}}",
840 // CHECK-NEXT:    "kind": "DeclStmt",
841 // CHECK-NEXT:    "range": {
842 // CHECK-NEXT:     "begin": {
843 // CHECK-NEXT:      "offset": 274,
844 // CHECK-NEXT:      "line": 25,
845 // CHECK-NEXT:      "col": 7,
846 // CHECK-NEXT:      "tokLen": 3
847 // CHECK-NEXT:     },
848 // CHECK-NEXT:     "end": {
849 // CHECK-NEXT:      "offset": 284,
850 // CHECK-NEXT:      "col": 17,
851 // CHECK-NEXT:      "tokLen": 1
852 // CHECK-NEXT:     }
853 // CHECK-NEXT:    },
854 // CHECK-NEXT:    "inner": [
855 // CHECK-NEXT:     {
856 // CHECK-NEXT:      "id": "0x{{.*}}",
857 // CHECK-NEXT:      "kind": "VarDecl",
858 // CHECK-NEXT:      "loc": {
859 // CHECK-NEXT:       "offset": 278,
860 // CHECK-NEXT:       "col": 11,
861 // CHECK-NEXT:       "tokLen": 1
862 // CHECK-NEXT:      },
863 // CHECK-NEXT:      "range": {
864 // CHECK-NEXT:       "begin": {
865 // CHECK-NEXT:        "offset": 274,
866 // CHECK-NEXT:        "col": 7,
867 // CHECK-NEXT:        "tokLen": 3
868 // CHECK-NEXT:       },
869 // CHECK-NEXT:       "end": {
870 // CHECK-NEXT:        "offset": 282,
871 // CHECK-NEXT:        "col": 15,
872 // CHECK-NEXT:        "tokLen": 2
873 // CHECK-NEXT:       }
874 // CHECK-NEXT:      },
875 // CHECK-NEXT:      "isUsed": true,
876 // CHECK-NEXT:      "name": "i",
877 // CHECK-NEXT:      "mangledName": "_ZZ4funciE1i_0",
878 // CHECK-NEXT:      "type": {
879 // CHECK-NEXT:       "qualType": "int"
880 // CHECK-NEXT:      },
881 // CHECK-NEXT:      "init": "c",
882 // CHECK-NEXT:      "inner": [
883 // CHECK-NEXT:       {
884 // CHECK-NEXT:        "id": "0x{{.*}}",
885 // CHECK-NEXT:        "kind": "IntegerLiteral",
886 // CHECK-NEXT:        "range": {
887 // CHECK-NEXT:         "begin": {
888 // CHECK-NEXT:          "offset": 282,
889 // CHECK-NEXT:          "col": 15,
890 // CHECK-NEXT:          "tokLen": 2
891 // CHECK-NEXT:         },
892 // CHECK-NEXT:         "end": {
893 // CHECK-NEXT:          "offset": 282,
894 // CHECK-NEXT:          "col": 15,
895 // CHECK-NEXT:          "tokLen": 2
896 // CHECK-NEXT:         }
897 // CHECK-NEXT:        },
898 // CHECK-NEXT:        "type": {
899 // CHECK-NEXT:         "qualType": "int"
900 // CHECK-NEXT:        },
901 // CHECK-NEXT:        "valueCategory": "prvalue",
902 // CHECK-NEXT:        "value": "12"
903 // CHECK-NEXT:       }
904 // CHECK-NEXT:      ]
905 // CHECK-NEXT:     }
906 // CHECK-NEXT:    ]
907 // CHECK-NEXT:   },
908 // CHECK-NEXT:   {
909 // CHECK-NEXT:    "id": "0x{{.*}}",
910 // CHECK-NEXT:    "kind": "ImplicitCastExpr",
911 // CHECK-NEXT:    "range": {
912 // CHECK-NEXT:     "begin": {
913 // CHECK-NEXT:      "offset": 286,
914 // CHECK-NEXT:      "col": 19,
915 // CHECK-NEXT:      "tokLen": 1
916 // CHECK-NEXT:     },
917 // CHECK-NEXT:     "end": {
918 // CHECK-NEXT:      "offset": 286,
919 // CHECK-NEXT:      "col": 19,
920 // CHECK-NEXT:      "tokLen": 1
921 // CHECK-NEXT:     }
922 // CHECK-NEXT:    },
923 // CHECK-NEXT:    "type": {
924 // CHECK-NEXT:     "qualType": "bool"
925 // CHECK-NEXT:    },
926 // CHECK-NEXT:    "valueCategory": "prvalue",
927 // CHECK-NEXT:    "castKind": "IntegralToBoolean",
928 // CHECK-NEXT:    "inner": [
929 // CHECK-NEXT:     {
930 // CHECK-NEXT:      "id": "0x{{.*}}",
931 // CHECK-NEXT:      "kind": "ImplicitCastExpr",
932 // CHECK-NEXT:      "range": {
933 // CHECK-NEXT:       "begin": {
934 // CHECK-NEXT:        "offset": 286,
935 // CHECK-NEXT:        "col": 19,
936 // CHECK-NEXT:        "tokLen": 1
937 // CHECK-NEXT:       },
938 // CHECK-NEXT:       "end": {
939 // CHECK-NEXT:        "offset": 286,
940 // CHECK-NEXT:        "col": 19,
941 // CHECK-NEXT:        "tokLen": 1
942 // CHECK-NEXT:       }
943 // CHECK-NEXT:      },
944 // CHECK-NEXT:      "type": {
945 // CHECK-NEXT:       "qualType": "int"
946 // CHECK-NEXT:      },
947 // CHECK-NEXT:      "valueCategory": "prvalue",
948 // CHECK-NEXT:      "castKind": "LValueToRValue",
949 // CHECK-NEXT:      "inner": [
950 // CHECK-NEXT:       {
951 // CHECK-NEXT:        "id": "0x{{.*}}",
952 // CHECK-NEXT:        "kind": "DeclRefExpr",
953 // CHECK-NEXT:        "range": {
954 // CHECK-NEXT:         "begin": {
955 // CHECK-NEXT:          "offset": 286,
956 // CHECK-NEXT:          "col": 19,
957 // CHECK-NEXT:          "tokLen": 1
958 // CHECK-NEXT:         },
959 // CHECK-NEXT:         "end": {
960 // CHECK-NEXT:          "offset": 286,
961 // CHECK-NEXT:          "col": 19,
962 // CHECK-NEXT:          "tokLen": 1
963 // CHECK-NEXT:         }
964 // CHECK-NEXT:        },
965 // CHECK-NEXT:        "type": {
966 // CHECK-NEXT:         "qualType": "int"
967 // CHECK-NEXT:        },
968 // CHECK-NEXT:        "valueCategory": "lvalue",
969 // CHECK-NEXT:        "referencedDecl": {
970 // CHECK-NEXT:         "id": "0x{{.*}}",
971 // CHECK-NEXT:         "kind": "VarDecl",
972 // CHECK-NEXT:         "name": "i",
973 // CHECK-NEXT:         "type": {
974 // CHECK-NEXT:          "qualType": "int"
975 // CHECK-NEXT:         }
976 // CHECK-NEXT:        }
977 // CHECK-NEXT:       }
978 // CHECK-NEXT:      ]
979 // CHECK-NEXT:     }
980 // CHECK-NEXT:    ]
981 // CHECK-NEXT:   },
982 // CHECK-NEXT:   {
983 // CHECK-NEXT:    "id": "0x{{.*}}",
984 // CHECK-NEXT:    "kind": "NullStmt",
985 // CHECK-NEXT:    "range": {
986 // CHECK-NEXT:     "begin": {
987 // CHECK-NEXT:      "offset": 293,
988 // CHECK-NEXT:      "line": 26,
989 // CHECK-NEXT:      "col": 5,
990 // CHECK-NEXT:      "tokLen": 1
991 // CHECK-NEXT:     },
992 // CHECK-NEXT:     "end": {
993 // CHECK-NEXT:      "offset": 293,
994 // CHECK-NEXT:      "col": 5,
995 // CHECK-NEXT:      "tokLen": 1
996 // CHECK-NEXT:     }
997 // CHECK-NEXT:    }
998 // CHECK-NEXT:   }
999 // CHECK-NEXT:  ]
1000 // CHECK-NEXT: }
1001