1 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump=json -ast-dump-filter Test %s | FileCheck %s
2 
3 namespace Test {
4 
5 namespace NS {
6 void Function();
7 }
8 void NS::Function() {}
9 
10 struct S {
11   void Method();
12 };
13 void S::Method() {}
14 
15 } // namespace Test
16 
17 // CHECK:  "kind": "NamespaceDecl",
18 // CHECK-NEXT:  "loc": {
19 // CHECK-NEXT:   "file": "{{.*}}",
20 // CHECK-NEXT:   "line": 3,
21 // CHECK-NEXT:   "col": 11,
22 // CHECK-NEXT:   "tokLen": 4
23 // CHECK-NEXT:  },
24 // CHECK-NEXT:  "range": {
25 // CHECK-NEXT:   "begin": {
26 // CHECK-NEXT:    "col": 1,
27 // CHECK-NEXT:    "tokLen": 9
28 // CHECK-NEXT:   },
29 // CHECK-NEXT:   "end": {
30 // CHECK-NEXT:    "line": 15,
31 // CHECK-NEXT:    "col": 1,
32 // CHECK-NEXT:    "tokLen": 1
33 // CHECK-NEXT:   }
34 // CHECK-NEXT:  },
35 // CHECK-NEXT:  "name": "Test",
36 // CHECK-NEXT:  "inner": [
37 // CHECK-NEXT:   {
38 // CHECK-NEXT:    "id": "0x[[NS_ID:.*]]",
39 // CHECK-NEXT:    "kind": "NamespaceDecl",
40 // CHECK-NEXT:    "loc": {
41 // CHECK-NEXT:     "line": 5,
42 // CHECK-NEXT:     "col": 11,
43 // CHECK-NEXT:     "tokLen": 2
44 // CHECK-NEXT:    },
45 // CHECK-NEXT:    "range": {
46 // CHECK-NEXT:     "begin": {
47 // CHECK-NEXT:      "col": 1,
48 // CHECK-NEXT:      "tokLen": 9
49 // CHECK-NEXT:     },
50 // CHECK-NEXT:     "end": {
51 // CHECK-NEXT:      "line": 7,
52 // CHECK-NEXT:      "col": 1,
53 // CHECK-NEXT:      "tokLen": 1
54 // CHECK-NEXT:     }
55 // CHECK-NEXT:    },
56 // CHECK-NEXT:    "name": "NS",
57 // CHECK-NEXT:    "inner": [
58 // CHECK-NEXT:     {
59 // CHECK-NEXT:      "id": "0x[[FUNCTION_ID:.*]]",
60 // CHECK-NEXT:      "kind": "FunctionDecl",
61 // CHECK-NEXT:      "loc": {
62 // CHECK-NEXT:       "line": 6,
63 // CHECK-NEXT:       "col": 6,
64 // CHECK-NEXT:       "tokLen": 8
65 // CHECK-NEXT:      },
66 // CHECK-NEXT:      "range": {
67 // CHECK-NEXT:       "begin": {
68 // CHECK-NEXT:        "col": 1,
69 // CHECK-NEXT:        "tokLen": 4
70 // CHECK-NEXT:       },
71 // CHECK-NEXT:       "end": {
72 // CHECK-NEXT:        "col": 15,
73 // CHECK-NEXT:        "tokLen": 1
74 // CHECK-NEXT:       }
75 // CHECK-NEXT:      },
76 // CHECK-NEXT:      "name": "Function",
77 // CHECK-NEXT:      "type": {
78 // CHECK-NEXT:       "qualType": "void ()"
79 // CHECK-NEXT:      }
80 // CHECK-NEXT:     }
81 // CHECK-NEXT:    ]
82 // CHECK-NEXT:   },
83 // CHECK-NEXT:   {
84 // CHECK-NEXT:    "id": "0x{{.*}}",
85 // CHECK-NEXT:    "kind": "FunctionDecl",
86 // CHECK-NEXT:    "loc": {
87 // CHECK-NEXT:     "line": 8,
88 // CHECK-NEXT:     "col": 10,
89 // CHECK-NEXT:     "tokLen": 8
90 // CHECK-NEXT:    },
91 // CHECK-NEXT:    "range": {
92 // CHECK-NEXT:     "begin": {
93 // CHECK-NEXT:      "col": 1,
94 // CHECK-NEXT:      "tokLen": 4
95 // CHECK-NEXT:     },
96 // CHECK-NEXT:     "end": {
97 // CHECK-NEXT:      "col": 22,
98 // CHECK-NEXT:      "tokLen": 1
99 // CHECK-NEXT:     }
100 // CHECK-NEXT:    },
101 // CHECK-NEXT:    "parentDeclContextId": "0x[[NS_ID]]",
102 // CHECK-NEXT:    "previousDecl": "0x[[FUNCTION_ID]]",
103 // CHECK-NEXT:    "name": "Function",
104 // CHECK-NEXT:    "type": {
105 // CHECK-NEXT:     "qualType": "void ()"
106 // CHECK-NEXT:    },
107 // CHECK-NEXT:    "inner": [
108 // CHECK-NEXT:     {
109 // CHECK-NEXT:      "id": "0x{{.*}}",
110 // CHECK-NEXT:      "kind": "CompoundStmt",
111 // CHECK-NEXT:      "range": {
112 // CHECK-NEXT:       "begin": {
113 // CHECK-NEXT:        "col": 21,
114 // CHECK-NEXT:        "tokLen": 1
115 // CHECK-NEXT:       },
116 // CHECK-NEXT:       "end": {
117 // CHECK-NEXT:        "col": 22,
118 // CHECK-NEXT:        "tokLen": 1
119 // CHECK-NEXT:       }
120 // CHECK-NEXT:      }
121 // CHECK-NEXT:     }
122 // CHECK-NEXT:    ]
123 // CHECK-NEXT:   },
124 // CHECK-NEXT:   {
125 // CHECK-NEXT:    "id": "0x[[S_ID:.*]]",
126 // CHECK-NEXT:    "kind": "CXXRecordDecl",
127 // CHECK-NEXT:    "loc": {
128 // CHECK-NEXT:     "line": 10,
129 // CHECK-NEXT:     "col": 8,
130 // CHECK-NEXT:     "tokLen": 1
131 // CHECK-NEXT:    },
132 // CHECK-NEXT:    "range": {
133 // CHECK-NEXT:     "begin": {
134 // CHECK-NEXT:      "col": 1,
135 // CHECK-NEXT:      "tokLen": 6
136 // CHECK-NEXT:     },
137 // CHECK-NEXT:     "end": {
138 // CHECK-NEXT:      "line": 12,
139 // CHECK-NEXT:      "col": 1,
140 // CHECK-NEXT:      "tokLen": 1
141 // CHECK-NEXT:     }
142 // CHECK-NEXT:    },
143 // CHECK-NEXT:    "name": "S",
144 // CHECK-NEXT:    "tagUsed": "struct",
145 // CHECK-NEXT:    "completeDefinition": true,
146 // CHECK-NEXT:    "definitionData": {
147 // CHECK-NEXT:     "canConstDefaultInit": true,
148 // CHECK-NEXT:     "canPassInRegisters": true,
149 // CHECK-NEXT:     "copyAssign": {
150 // CHECK-NEXT:      "hasConstParam": true,
151 // CHECK-NEXT:      "implicitHasConstParam": true,
152 // CHECK-NEXT:      "needsImplicit": true,
153 // CHECK-NEXT:      "trivial": true
154 // CHECK-NEXT:     },
155 // CHECK-NEXT:     "copyCtor": {
156 // CHECK-NEXT:      "hasConstParam": true,
157 // CHECK-NEXT:      "implicitHasConstParam": true,
158 // CHECK-NEXT:      "needsImplicit": true,
159 // CHECK-NEXT:      "simple": true,
160 // CHECK-NEXT:      "trivial": true
161 // CHECK-NEXT:     },
162 // CHECK-NEXT:     "defaultCtor": {
163 // CHECK-NEXT:      "defaultedIsConstexpr": true,
164 // CHECK-NEXT:      "exists": true,
165 // CHECK-NEXT:      "isConstexpr": true,
166 // CHECK-NEXT:      "needsImplicit": true,
167 // CHECK-NEXT:      "trivial": true
168 // CHECK-NEXT:     },
169 // CHECK-NEXT:     "dtor": {
170 // CHECK-NEXT:      "irrelevant": true,
171 // CHECK-NEXT:      "needsImplicit": true,
172 // CHECK-NEXT:      "simple": true,
173 // CHECK-NEXT:      "trivial": true
174 // CHECK-NEXT:     },
175 // CHECK-NEXT:     "hasConstexprNonCopyMoveConstructor": true,
176 // CHECK-NEXT:     "isAggregate": true,
177 // CHECK-NEXT:     "isEmpty": true,
178 // CHECK-NEXT:     "isLiteral": true,
179 // CHECK-NEXT:     "isPOD": true,
180 // CHECK-NEXT:     "isStandardLayout": true,
181 // CHECK-NEXT:     "isTrivial": true,
182 // CHECK-NEXT:     "isTriviallyCopyable": true,
183 // CHECK-NEXT:     "moveAssign": {
184 // CHECK-NEXT:      "exists": true,
185 // CHECK-NEXT:      "needsImplicit": true,
186 // CHECK-NEXT:      "simple": true,
187 // CHECK-NEXT:      "trivial": true
188 // CHECK-NEXT:     },
189 // CHECK-NEXT:     "moveCtor": {
190 // CHECK-NEXT:      "exists": true,
191 // CHECK-NEXT:      "needsImplicit": true,
192 // CHECK-NEXT:      "simple": true,
193 // CHECK-NEXT:      "trivial": true
194 // CHECK-NEXT:     }
195 // CHECK-NEXT:    },
196 // CHECK-NEXT:    "inner": [
197 // CHECK-NEXT:     {
198 // CHECK-NEXT:      "id": "0x{{.*}}",
199 // CHECK-NEXT:      "kind": "CXXRecordDecl",
200 // CHECK-NEXT:      "loc": {
201 // CHECK-NEXT:       "line": 10,
202 // CHECK-NEXT:       "col": 8,
203 // CHECK-NEXT:       "tokLen": 1
204 // CHECK-NEXT:      },
205 // CHECK-NEXT:      "range": {
206 // CHECK-NEXT:       "begin": {
207 // CHECK-NEXT:        "col": 1,
208 // CHECK-NEXT:        "tokLen": 6
209 // CHECK-NEXT:       },
210 // CHECK-NEXT:       "end": {
211 // CHECK-NEXT:        "col": 8,
212 // CHECK-NEXT:        "tokLen": 1
213 // CHECK-NEXT:       }
214 // CHECK-NEXT:      },
215 // CHECK-NEXT:      "isImplicit": true,
216 // CHECK-NEXT:      "name": "S",
217 // CHECK-NEXT:      "tagUsed": "struct"
218 // CHECK-NEXT:     },
219 // CHECK-NEXT:     {
220 // CHECK-NEXT:      "id": "0x[[METHOD_ID:.*]]",
221 // CHECK-NEXT:      "kind": "CXXMethodDecl",
222 // CHECK-NEXT:      "loc": {
223 // CHECK-NEXT:       "line": 11,
224 // CHECK-NEXT:       "col": 8,
225 // CHECK-NEXT:       "tokLen": 6
226 // CHECK-NEXT:      },
227 // CHECK-NEXT:      "range": {
228 // CHECK-NEXT:       "begin": {
229 // CHECK-NEXT:        "col": 3,
230 // CHECK-NEXT:        "tokLen": 4
231 // CHECK-NEXT:       },
232 // CHECK-NEXT:       "end": {
233 // CHECK-NEXT:        "col": 15,
234 // CHECK-NEXT:        "tokLen": 1
235 // CHECK-NEXT:       }
236 // CHECK-NEXT:      },
237 // CHECK-NEXT:      "name": "Method",
238 // CHECK-NEXT:      "type": {
239 // CHECK-NEXT:       "qualType": "void ()"
240 // CHECK-NEXT:      }
241 // CHECK-NEXT:     }
242 // CHECK-NEXT:    ]
243 // CHECK-NEXT:   },
244 // CHECK-NEXT:   {
245 // CHECK-NEXT:    "id": "0x{{.*}}",
246 // CHECK-NEXT:    "kind": "CXXMethodDecl",
247 // CHECK-NEXT:    "loc": {
248 // CHECK-NEXT:     "line": 13,
249 // CHECK-NEXT:     "col": 9,
250 // CHECK-NEXT:     "tokLen": 6
251 // CHECK-NEXT:    },
252 // CHECK-NEXT:    "range": {
253 // CHECK-NEXT:     "begin": {
254 // CHECK-NEXT:      "col": 1,
255 // CHECK-NEXT:      "tokLen": 4
256 // CHECK-NEXT:     },
257 // CHECK-NEXT:     "end": {
258 // CHECK-NEXT:      "col": 19,
259 // CHECK-NEXT:      "tokLen": 1
260 // CHECK-NEXT:     }
261 // CHECK-NEXT:    },
262 // CHECK-NEXT:    "parentDeclContextId": "0x[[S_ID]]",
263 // CHECK-NEXT:    "previousDecl": "0x[[METHOD_ID]]",
264 // CHECK-NEXT:    "name": "Method",
265 // CHECK-NEXT:    "type": {
266 // CHECK-NEXT:     "qualType": "void ()"
267 // CHECK-NEXT:    },
268 // CHECK-NEXT:    "inner": [
269 // CHECK-NEXT:     {
270 // CHECK-NEXT:      "id": "0x{{.*}}",
271 // CHECK-NEXT:      "kind": "CompoundStmt",
272 // CHECK-NEXT:      "range": {
273 // CHECK-NEXT:       "begin": {
274 // CHECK-NEXT:        "col": 18,
275 // CHECK-NEXT:        "tokLen": 1
276 // CHECK-NEXT:       },
277 // CHECK-NEXT:       "end": {
278 // CHECK-NEXT:        "col": 19,
279 // CHECK-NEXT:        "tokLen": 1
280 // CHECK-NEXT:       }
281 // CHECK-NEXT:      }
282 // CHECK-NEXT:     }
283 // CHECK-NEXT:    ]
284 // CHECK-NEXT:   }
285 // CHECK-NEXT:  ]
286 // CHECK-NEXT: }
287