1 // RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++17 -ast-dump=json %s | FileCheck %s
2 
3 enum {
4   One,
5   Two
6 };
7 
8 enum E {
9   Three,
10   Four
11 };
12 
13 enum F : short {
14   Five,
15   Six
16 };
17 
18 enum struct G {
19   Seven,
20   Eight
21 };
22 
23 enum class H {
24   Nine,
25   Ten
26 };
27 
28 enum class I : int {
29   Eleven,
30   Twelve
31 };
32 
33 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
34 // using --filters=EnumDecl
35 
36 
37 // CHECK:  "kind": "EnumDecl",
38 // CHECK-NEXT:  "loc": {
39 // CHECK-NEXT:   "offset": 88,
40 // CHECK-NEXT:   "file": "{{.*}}",
41 // CHECK-NEXT:   "line": 3,
42 // CHECK-NEXT:   "col": 1,
43 // CHECK-NEXT:   "tokLen": 4
44 // CHECK-NEXT:  },
45 // CHECK-NEXT:  "range": {
46 // CHECK-NEXT:   "begin": {
47 // CHECK-NEXT:    "offset": 88,
48 // CHECK-NEXT:    "col": 1,
49 // CHECK-NEXT:    "tokLen": 4
50 // CHECK-NEXT:   },
51 // CHECK-NEXT:   "end": {
52 // CHECK-NEXT:    "offset": 108,
53 // CHECK-NEXT:    "line": 6,
54 // CHECK-NEXT:    "col": 1,
55 // CHECK-NEXT:    "tokLen": 1
56 // CHECK-NEXT:   }
57 // CHECK-NEXT:  },
58 // CHECK-NEXT:  "inner": [
59 // CHECK-NEXT:   {
60 // CHECK-NEXT:    "id": "0x{{.*}}",
61 // CHECK-NEXT:    "kind": "EnumConstantDecl",
62 // CHECK-NEXT:    "loc": {
63 // CHECK-NEXT:     "offset": 97,
64 // CHECK-NEXT:     "line": 4,
65 // CHECK-NEXT:     "col": 3,
66 // CHECK-NEXT:     "tokLen": 3
67 // CHECK-NEXT:    },
68 // CHECK-NEXT:    "range": {
69 // CHECK-NEXT:     "begin": {
70 // CHECK-NEXT:      "offset": 97,
71 // CHECK-NEXT:      "col": 3,
72 // CHECK-NEXT:      "tokLen": 3
73 // CHECK-NEXT:     },
74 // CHECK-NEXT:     "end": {
75 // CHECK-NEXT:      "offset": 97,
76 // CHECK-NEXT:      "col": 3,
77 // CHECK-NEXT:      "tokLen": 3
78 // CHECK-NEXT:     }
79 // CHECK-NEXT:    },
80 // CHECK-NEXT:    "name": "One",
81 // CHECK-NEXT:    "type": {
82 // CHECK-NEXT:     "qualType": "(anonymous enum at {{.*}}:3:1)"
83 // CHECK-NEXT:    }
84 // CHECK-NEXT:   },
85 // CHECK-NEXT:   {
86 // CHECK-NEXT:    "id": "0x{{.*}}",
87 // CHECK-NEXT:    "kind": "EnumConstantDecl",
88 // CHECK-NEXT:    "loc": {
89 // CHECK-NEXT:     "offset": 104,
90 // CHECK-NEXT:     "line": 5,
91 // CHECK-NEXT:     "col": 3,
92 // CHECK-NEXT:     "tokLen": 3
93 // CHECK-NEXT:    },
94 // CHECK-NEXT:    "range": {
95 // CHECK-NEXT:     "begin": {
96 // CHECK-NEXT:      "offset": 104,
97 // CHECK-NEXT:      "col": 3,
98 // CHECK-NEXT:      "tokLen": 3
99 // CHECK-NEXT:     },
100 // CHECK-NEXT:     "end": {
101 // CHECK-NEXT:      "offset": 104,
102 // CHECK-NEXT:      "col": 3,
103 // CHECK-NEXT:      "tokLen": 3
104 // CHECK-NEXT:     }
105 // CHECK-NEXT:    },
106 // CHECK-NEXT:    "name": "Two",
107 // CHECK-NEXT:    "type": {
108 // CHECK-NEXT:     "qualType": "(anonymous enum at {{.*}}:3:1)"
109 // CHECK-NEXT:    }
110 // CHECK-NEXT:   }
111 // CHECK-NEXT:  ]
112 // CHECK-NEXT: }
113 
114 
115 // CHECK:  "kind": "EnumDecl",
116 // CHECK-NEXT:  "loc": {
117 // CHECK-NEXT:   "offset": 117,
118 // CHECK-NEXT:   "line": 8,
119 // CHECK-NEXT:   "col": 6,
120 // CHECK-NEXT:   "tokLen": 1
121 // CHECK-NEXT:  },
122 // CHECK-NEXT:  "range": {
123 // CHECK-NEXT:   "begin": {
124 // CHECK-NEXT:    "offset": 112,
125 // CHECK-NEXT:    "col": 1,
126 // CHECK-NEXT:    "tokLen": 4
127 // CHECK-NEXT:   },
128 // CHECK-NEXT:   "end": {
129 // CHECK-NEXT:    "offset": 137,
130 // CHECK-NEXT:    "line": 11,
131 // CHECK-NEXT:    "col": 1,
132 // CHECK-NEXT:    "tokLen": 1
133 // CHECK-NEXT:   }
134 // CHECK-NEXT:  },
135 // CHECK-NEXT:  "name": "E",
136 // CHECK-NEXT:  "inner": [
137 // CHECK-NEXT:   {
138 // CHECK-NEXT:    "id": "0x{{.*}}",
139 // CHECK-NEXT:    "kind": "EnumConstantDecl",
140 // CHECK-NEXT:    "loc": {
141 // CHECK-NEXT:     "offset": 123,
142 // CHECK-NEXT:     "line": 9,
143 // CHECK-NEXT:     "col": 3,
144 // CHECK-NEXT:     "tokLen": 5
145 // CHECK-NEXT:    },
146 // CHECK-NEXT:    "range": {
147 // CHECK-NEXT:     "begin": {
148 // CHECK-NEXT:      "offset": 123,
149 // CHECK-NEXT:      "col": 3,
150 // CHECK-NEXT:      "tokLen": 5
151 // CHECK-NEXT:     },
152 // CHECK-NEXT:     "end": {
153 // CHECK-NEXT:      "offset": 123,
154 // CHECK-NEXT:      "col": 3,
155 // CHECK-NEXT:      "tokLen": 5
156 // CHECK-NEXT:     }
157 // CHECK-NEXT:    },
158 // CHECK-NEXT:    "name": "Three",
159 // CHECK-NEXT:    "type": {
160 // CHECK-NEXT:     "qualType": "E"
161 // CHECK-NEXT:    }
162 // CHECK-NEXT:   },
163 // CHECK-NEXT:   {
164 // CHECK-NEXT:    "id": "0x{{.*}}",
165 // CHECK-NEXT:    "kind": "EnumConstantDecl",
166 // CHECK-NEXT:    "loc": {
167 // CHECK-NEXT:     "offset": 132,
168 // CHECK-NEXT:     "line": 10,
169 // CHECK-NEXT:     "col": 3,
170 // CHECK-NEXT:     "tokLen": 4
171 // CHECK-NEXT:    },
172 // CHECK-NEXT:    "range": {
173 // CHECK-NEXT:     "begin": {
174 // CHECK-NEXT:      "offset": 132,
175 // CHECK-NEXT:      "col": 3,
176 // CHECK-NEXT:      "tokLen": 4
177 // CHECK-NEXT:     },
178 // CHECK-NEXT:     "end": {
179 // CHECK-NEXT:      "offset": 132,
180 // CHECK-NEXT:      "col": 3,
181 // CHECK-NEXT:      "tokLen": 4
182 // CHECK-NEXT:     }
183 // CHECK-NEXT:    },
184 // CHECK-NEXT:    "name": "Four",
185 // CHECK-NEXT:    "type": {
186 // CHECK-NEXT:     "qualType": "E"
187 // CHECK-NEXT:    }
188 // CHECK-NEXT:   }
189 // CHECK-NEXT:  ]
190 // CHECK-NEXT: }
191 
192 
193 // CHECK:  "kind": "EnumDecl",
194 // CHECK-NEXT:  "loc": {
195 // CHECK-NEXT:   "offset": 146,
196 // CHECK-NEXT:   "line": 13,
197 // CHECK-NEXT:   "col": 6,
198 // CHECK-NEXT:   "tokLen": 1
199 // CHECK-NEXT:  },
200 // CHECK-NEXT:  "range": {
201 // CHECK-NEXT:   "begin": {
202 // CHECK-NEXT:    "offset": 141,
203 // CHECK-NEXT:    "col": 1,
204 // CHECK-NEXT:    "tokLen": 4
205 // CHECK-NEXT:   },
206 // CHECK-NEXT:   "end": {
207 // CHECK-NEXT:    "offset": 172,
208 // CHECK-NEXT:    "line": 16,
209 // CHECK-NEXT:    "col": 1,
210 // CHECK-NEXT:    "tokLen": 1
211 // CHECK-NEXT:   }
212 // CHECK-NEXT:  },
213 // CHECK-NEXT:  "name": "F",
214 // CHECK-NEXT:  "fixedUnderlyingType": {
215 // CHECK-NEXT:   "qualType": "short"
216 // CHECK-NEXT:  },
217 // CHECK-NEXT:  "inner": [
218 // CHECK-NEXT:   {
219 // CHECK-NEXT:    "id": "0x{{.*}}",
220 // CHECK-NEXT:    "kind": "EnumConstantDecl",
221 // CHECK-NEXT:    "loc": {
222 // CHECK-NEXT:     "offset": 160,
223 // CHECK-NEXT:     "line": 14,
224 // CHECK-NEXT:     "col": 3,
225 // CHECK-NEXT:     "tokLen": 4
226 // CHECK-NEXT:    },
227 // CHECK-NEXT:    "range": {
228 // CHECK-NEXT:     "begin": {
229 // CHECK-NEXT:      "offset": 160,
230 // CHECK-NEXT:      "col": 3,
231 // CHECK-NEXT:      "tokLen": 4
232 // CHECK-NEXT:     },
233 // CHECK-NEXT:     "end": {
234 // CHECK-NEXT:      "offset": 160,
235 // CHECK-NEXT:      "col": 3,
236 // CHECK-NEXT:      "tokLen": 4
237 // CHECK-NEXT:     }
238 // CHECK-NEXT:    },
239 // CHECK-NEXT:    "name": "Five",
240 // CHECK-NEXT:    "type": {
241 // CHECK-NEXT:     "qualType": "F"
242 // CHECK-NEXT:    }
243 // CHECK-NEXT:   },
244 // CHECK-NEXT:   {
245 // CHECK-NEXT:    "id": "0x{{.*}}",
246 // CHECK-NEXT:    "kind": "EnumConstantDecl",
247 // CHECK-NEXT:    "loc": {
248 // CHECK-NEXT:     "offset": 168,
249 // CHECK-NEXT:     "line": 15,
250 // CHECK-NEXT:     "col": 3,
251 // CHECK-NEXT:     "tokLen": 3
252 // CHECK-NEXT:    },
253 // CHECK-NEXT:    "range": {
254 // CHECK-NEXT:     "begin": {
255 // CHECK-NEXT:      "offset": 168,
256 // CHECK-NEXT:      "col": 3,
257 // CHECK-NEXT:      "tokLen": 3
258 // CHECK-NEXT:     },
259 // CHECK-NEXT:     "end": {
260 // CHECK-NEXT:      "offset": 168,
261 // CHECK-NEXT:      "col": 3,
262 // CHECK-NEXT:      "tokLen": 3
263 // CHECK-NEXT:     }
264 // CHECK-NEXT:    },
265 // CHECK-NEXT:    "name": "Six",
266 // CHECK-NEXT:    "type": {
267 // CHECK-NEXT:     "qualType": "F"
268 // CHECK-NEXT:    }
269 // CHECK-NEXT:   }
270 // CHECK-NEXT:  ]
271 // CHECK-NEXT: }
272 
273 
274 // CHECK:  "kind": "EnumDecl",
275 // CHECK-NEXT:  "loc": {
276 // CHECK-NEXT:   "offset": 188,
277 // CHECK-NEXT:   "line": 18,
278 // CHECK-NEXT:   "col": 13,
279 // CHECK-NEXT:   "tokLen": 1
280 // CHECK-NEXT:  },
281 // CHECK-NEXT:  "range": {
282 // CHECK-NEXT:   "begin": {
283 // CHECK-NEXT:    "offset": 176,
284 // CHECK-NEXT:    "col": 1,
285 // CHECK-NEXT:    "tokLen": 4
286 // CHECK-NEXT:   },
287 // CHECK-NEXT:   "end": {
288 // CHECK-NEXT:    "offset": 209,
289 // CHECK-NEXT:    "line": 21,
290 // CHECK-NEXT:    "col": 1,
291 // CHECK-NEXT:    "tokLen": 1
292 // CHECK-NEXT:   }
293 // CHECK-NEXT:  },
294 // CHECK-NEXT:  "name": "G",
295 // CHECK-NEXT:  "fixedUnderlyingType": {
296 // CHECK-NEXT:   "qualType": "int"
297 // CHECK-NEXT:  },
298 // CHECK-NEXT:  "scopedEnumTag": "struct",
299 // CHECK-NEXT:  "inner": [
300 // CHECK-NEXT:   {
301 // CHECK-NEXT:    "id": "0x{{.*}}",
302 // CHECK-NEXT:    "kind": "EnumConstantDecl",
303 // CHECK-NEXT:    "loc": {
304 // CHECK-NEXT:     "offset": 194,
305 // CHECK-NEXT:     "line": 19,
306 // CHECK-NEXT:     "col": 3,
307 // CHECK-NEXT:     "tokLen": 5
308 // CHECK-NEXT:    },
309 // CHECK-NEXT:    "range": {
310 // CHECK-NEXT:     "begin": {
311 // CHECK-NEXT:      "offset": 194,
312 // CHECK-NEXT:      "col": 3,
313 // CHECK-NEXT:      "tokLen": 5
314 // CHECK-NEXT:     },
315 // CHECK-NEXT:     "end": {
316 // CHECK-NEXT:      "offset": 194,
317 // CHECK-NEXT:      "col": 3,
318 // CHECK-NEXT:      "tokLen": 5
319 // CHECK-NEXT:     }
320 // CHECK-NEXT:    },
321 // CHECK-NEXT:    "name": "Seven",
322 // CHECK-NEXT:    "type": {
323 // CHECK-NEXT:     "qualType": "G"
324 // CHECK-NEXT:    }
325 // CHECK-NEXT:   },
326 // CHECK-NEXT:   {
327 // CHECK-NEXT:    "id": "0x{{.*}}",
328 // CHECK-NEXT:    "kind": "EnumConstantDecl",
329 // CHECK-NEXT:    "loc": {
330 // CHECK-NEXT:     "offset": 203,
331 // CHECK-NEXT:     "line": 20,
332 // CHECK-NEXT:     "col": 3,
333 // CHECK-NEXT:     "tokLen": 5
334 // CHECK-NEXT:    },
335 // CHECK-NEXT:    "range": {
336 // CHECK-NEXT:     "begin": {
337 // CHECK-NEXT:      "offset": 203,
338 // CHECK-NEXT:      "col": 3,
339 // CHECK-NEXT:      "tokLen": 5
340 // CHECK-NEXT:     },
341 // CHECK-NEXT:     "end": {
342 // CHECK-NEXT:      "offset": 203,
343 // CHECK-NEXT:      "col": 3,
344 // CHECK-NEXT:      "tokLen": 5
345 // CHECK-NEXT:     }
346 // CHECK-NEXT:    },
347 // CHECK-NEXT:    "name": "Eight",
348 // CHECK-NEXT:    "type": {
349 // CHECK-NEXT:     "qualType": "G"
350 // CHECK-NEXT:    }
351 // CHECK-NEXT:   }
352 // CHECK-NEXT:  ]
353 // CHECK-NEXT: }
354 
355 
356 // CHECK:  "kind": "EnumDecl",
357 // CHECK-NEXT:  "loc": {
358 // CHECK-NEXT:   "offset": 224,
359 // CHECK-NEXT:   "line": 23,
360 // CHECK-NEXT:   "col": 12,
361 // CHECK-NEXT:   "tokLen": 1
362 // CHECK-NEXT:  },
363 // CHECK-NEXT:  "range": {
364 // CHECK-NEXT:   "begin": {
365 // CHECK-NEXT:    "offset": 213,
366 // CHECK-NEXT:    "col": 1,
367 // CHECK-NEXT:    "tokLen": 4
368 // CHECK-NEXT:   },
369 // CHECK-NEXT:   "end": {
370 // CHECK-NEXT:    "offset": 242,
371 // CHECK-NEXT:    "line": 26,
372 // CHECK-NEXT:    "col": 1,
373 // CHECK-NEXT:    "tokLen": 1
374 // CHECK-NEXT:   }
375 // CHECK-NEXT:  },
376 // CHECK-NEXT:  "name": "H",
377 // CHECK-NEXT:  "fixedUnderlyingType": {
378 // CHECK-NEXT:   "qualType": "int"
379 // CHECK-NEXT:  },
380 // CHECK-NEXT:  "scopedEnumTag": "class",
381 // CHECK-NEXT:  "inner": [
382 // CHECK-NEXT:   {
383 // CHECK-NEXT:    "id": "0x{{.*}}",
384 // CHECK-NEXT:    "kind": "EnumConstantDecl",
385 // CHECK-NEXT:    "loc": {
386 // CHECK-NEXT:     "offset": 230,
387 // CHECK-NEXT:     "line": 24,
388 // CHECK-NEXT:     "col": 3,
389 // CHECK-NEXT:     "tokLen": 4
390 // CHECK-NEXT:    },
391 // CHECK-NEXT:    "range": {
392 // CHECK-NEXT:     "begin": {
393 // CHECK-NEXT:      "offset": 230,
394 // CHECK-NEXT:      "col": 3,
395 // CHECK-NEXT:      "tokLen": 4
396 // CHECK-NEXT:     },
397 // CHECK-NEXT:     "end": {
398 // CHECK-NEXT:      "offset": 230,
399 // CHECK-NEXT:      "col": 3,
400 // CHECK-NEXT:      "tokLen": 4
401 // CHECK-NEXT:     }
402 // CHECK-NEXT:    },
403 // CHECK-NEXT:    "name": "Nine",
404 // CHECK-NEXT:    "type": {
405 // CHECK-NEXT:     "qualType": "H"
406 // CHECK-NEXT:    }
407 // CHECK-NEXT:   },
408 // CHECK-NEXT:   {
409 // CHECK-NEXT:    "id": "0x{{.*}}",
410 // CHECK-NEXT:    "kind": "EnumConstantDecl",
411 // CHECK-NEXT:    "loc": {
412 // CHECK-NEXT:     "offset": 238,
413 // CHECK-NEXT:     "line": 25,
414 // CHECK-NEXT:     "col": 3,
415 // CHECK-NEXT:     "tokLen": 3
416 // CHECK-NEXT:    },
417 // CHECK-NEXT:    "range": {
418 // CHECK-NEXT:     "begin": {
419 // CHECK-NEXT:      "offset": 238,
420 // CHECK-NEXT:      "col": 3,
421 // CHECK-NEXT:      "tokLen": 3
422 // CHECK-NEXT:     },
423 // CHECK-NEXT:     "end": {
424 // CHECK-NEXT:      "offset": 238,
425 // CHECK-NEXT:      "col": 3,
426 // CHECK-NEXT:      "tokLen": 3
427 // CHECK-NEXT:     }
428 // CHECK-NEXT:    },
429 // CHECK-NEXT:    "name": "Ten",
430 // CHECK-NEXT:    "type": {
431 // CHECK-NEXT:     "qualType": "H"
432 // CHECK-NEXT:    }
433 // CHECK-NEXT:   }
434 // CHECK-NEXT:  ]
435 // CHECK-NEXT: }
436 
437 
438 // CHECK:  "kind": "EnumDecl",
439 // CHECK-NEXT:  "loc": {
440 // CHECK-NEXT:   "offset": 257,
441 // CHECK-NEXT:   "line": 28,
442 // CHECK-NEXT:   "col": 12,
443 // CHECK-NEXT:   "tokLen": 1
444 // CHECK-NEXT:  },
445 // CHECK-NEXT:  "range": {
446 // CHECK-NEXT:   "begin": {
447 // CHECK-NEXT:    "offset": 246,
448 // CHECK-NEXT:    "col": 1,
449 // CHECK-NEXT:    "tokLen": 4
450 // CHECK-NEXT:   },
451 // CHECK-NEXT:   "end": {
452 // CHECK-NEXT:    "offset": 286,
453 // CHECK-NEXT:    "line": 31,
454 // CHECK-NEXT:    "col": 1,
455 // CHECK-NEXT:    "tokLen": 1
456 // CHECK-NEXT:   }
457 // CHECK-NEXT:  },
458 // CHECK-NEXT:  "name": "I",
459 // CHECK-NEXT:  "fixedUnderlyingType": {
460 // CHECK-NEXT:   "qualType": "int"
461 // CHECK-NEXT:  },
462 // CHECK-NEXT:  "scopedEnumTag": "class",
463 // CHECK-NEXT:  "inner": [
464 // CHECK-NEXT:   {
465 // CHECK-NEXT:    "id": "0x{{.*}}",
466 // CHECK-NEXT:    "kind": "EnumConstantDecl",
467 // CHECK-NEXT:    "loc": {
468 // CHECK-NEXT:     "offset": 269,
469 // CHECK-NEXT:     "line": 29,
470 // CHECK-NEXT:     "col": 3,
471 // CHECK-NEXT:     "tokLen": 6
472 // CHECK-NEXT:    },
473 // CHECK-NEXT:    "range": {
474 // CHECK-NEXT:     "begin": {
475 // CHECK-NEXT:      "offset": 269,
476 // CHECK-NEXT:      "col": 3,
477 // CHECK-NEXT:      "tokLen": 6
478 // CHECK-NEXT:     },
479 // CHECK-NEXT:     "end": {
480 // CHECK-NEXT:      "offset": 269,
481 // CHECK-NEXT:      "col": 3,
482 // CHECK-NEXT:      "tokLen": 6
483 // CHECK-NEXT:     }
484 // CHECK-NEXT:    },
485 // CHECK-NEXT:    "name": "Eleven",
486 // CHECK-NEXT:    "type": {
487 // CHECK-NEXT:     "qualType": "I"
488 // CHECK-NEXT:    }
489 // CHECK-NEXT:   },
490 // CHECK-NEXT:   {
491 // CHECK-NEXT:    "id": "0x{{.*}}",
492 // CHECK-NEXT:    "kind": "EnumConstantDecl",
493 // CHECK-NEXT:    "loc": {
494 // CHECK-NEXT:     "offset": 279,
495 // CHECK-NEXT:     "line": 30,
496 // CHECK-NEXT:     "col": 3,
497 // CHECK-NEXT:     "tokLen": 6
498 // CHECK-NEXT:    },
499 // CHECK-NEXT:    "range": {
500 // CHECK-NEXT:     "begin": {
501 // CHECK-NEXT:      "offset": 279,
502 // CHECK-NEXT:      "col": 3,
503 // CHECK-NEXT:      "tokLen": 6
504 // CHECK-NEXT:     },
505 // CHECK-NEXT:     "end": {
506 // CHECK-NEXT:      "offset": 279,
507 // CHECK-NEXT:      "col": 3,
508 // CHECK-NEXT:      "tokLen": 6
509 // CHECK-NEXT:     }
510 // CHECK-NEXT:    },
511 // CHECK-NEXT:    "name": "Twelve",
512 // CHECK-NEXT:    "type": {
513 // CHECK-NEXT:     "qualType": "I"
514 // CHECK-NEXT:    }
515 // CHECK-NEXT:   }
516 // CHECK-NEXT:  ]
517 // CHECK-NEXT: }
518