xref: /llvm-project/clang/test/ExtractAPI/union.c (revision e05c1b46d0d3739cc48ad912dbe6e9affce05927)
1 // RUN: rm -rf %t
2 // RUN: split-file %s %t
3 // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4 // RUN: %t/reference.output.json.in >> %t/reference.output.json
5 // RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx -x c-header\
6 // RUN:   %t/input.h -o %t/output.json -verify
7 
8 // Generator version is not consistent across test runs, normalize it.
9 // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10 // RUN: %t/output.json >> %t/output-normalized.json
11 // RUN: diff %t/reference.output.json %t/output-normalized.json
12 
13 //--- input.h
14 /// My Union
15 union Union {
16     /// the a option
17     int a;
18     /// the b option
19     char b;
20 };
21 // expected-no-diagnostics
22 
23 //--- reference.output.json.in
24 {
25   "metadata": {
26     "formatVersion": {
27       "major": 0,
28       "minor": 5,
29       "patch": 3
30     },
31     "generator": "?"
32   },
33   "module": {
34     "name": "",
35     "platform": {
36       "architecture": "arm64",
37       "operatingSystem": {
38         "minimumVersion": {
39           "major": 11,
40           "minor": 0,
41           "patch": 0
42         },
43         "name": "macosx"
44       },
45       "vendor": "apple"
46     }
47   },
48   "relationships": [
49     {
50       "kind": "memberOf",
51       "source": "c:@U@Union@FI@a",
52       "target": "c:@U@Union",
53       "targetFallback": "Union"
54     },
55     {
56       "kind": "memberOf",
57       "source": "c:@U@Union@FI@b",
58       "target": "c:@U@Union",
59       "targetFallback": "Union"
60     }
61   ],
62   "symbols": [
63     {
64       "accessLevel": "public",
65       "declarationFragments": [
66         {
67           "kind": "keyword",
68           "spelling": "union"
69         },
70         {
71           "kind": "text",
72           "spelling": " "
73         },
74         {
75           "kind": "identifier",
76           "spelling": "Union"
77         },
78         {
79           "kind": "text",
80           "spelling": ";"
81         }
82       ],
83       "docComment": {
84         "lines": [
85           {
86             "range": {
87               "end": {
88                 "character": 12,
89                 "line": 0
90               },
91               "start": {
92                 "character": 4,
93                 "line": 0
94               }
95             },
96             "text": "My Union"
97           }
98         ]
99       },
100       "identifier": {
101         "interfaceLanguage": "c",
102         "precise": "c:@U@Union"
103       },
104       "kind": {
105         "displayName": "Union",
106         "identifier": "c.union"
107       },
108       "location": {
109         "position": {
110           "character": 6,
111           "line": 1
112         },
113         "uri": "file://INPUT_DIR/input.h"
114       },
115       "names": {
116         "navigator": [
117           {
118             "kind": "identifier",
119             "spelling": "Union"
120           }
121         ],
122         "subHeading": [
123           {
124             "kind": "identifier",
125             "spelling": "Union"
126           }
127         ],
128         "title": "Union"
129       },
130       "pathComponents": [
131         "Union"
132       ]
133     },
134     {
135       "accessLevel": "public",
136       "declarationFragments": [
137         {
138           "kind": "typeIdentifier",
139           "preciseIdentifier": "c:I",
140           "spelling": "int"
141         },
142         {
143           "kind": "text",
144           "spelling": " "
145         },
146         {
147           "kind": "identifier",
148           "spelling": "a"
149         },
150         {
151           "kind": "text",
152           "spelling": ";"
153         }
154       ],
155       "docComment": {
156         "lines": [
157           {
158             "range": {
159               "end": {
160                 "character": 20,
161                 "line": 2
162               },
163               "start": {
164                 "character": 8,
165                 "line": 2
166               }
167             },
168             "text": "the a option"
169           }
170         ]
171       },
172       "identifier": {
173         "interfaceLanguage": "c",
174         "precise": "c:@U@Union@FI@a"
175       },
176       "kind": {
177         "displayName": "Instance Property",
178         "identifier": "c.property"
179       },
180       "location": {
181         "position": {
182           "character": 8,
183           "line": 3
184         },
185         "uri": "file://INPUT_DIR/input.h"
186       },
187       "names": {
188         "navigator": [
189           {
190             "kind": "identifier",
191             "spelling": "a"
192           }
193         ],
194         "subHeading": [
195           {
196             "kind": "identifier",
197             "spelling": "a"
198           }
199         ],
200         "title": "a"
201       },
202       "pathComponents": [
203         "Union",
204         "a"
205       ]
206     },
207     {
208       "accessLevel": "public",
209       "declarationFragments": [
210         {
211           "kind": "typeIdentifier",
212           "preciseIdentifier": "c:C",
213           "spelling": "char"
214         },
215         {
216           "kind": "text",
217           "spelling": " "
218         },
219         {
220           "kind": "identifier",
221           "spelling": "b"
222         },
223         {
224           "kind": "text",
225           "spelling": ";"
226         }
227       ],
228       "docComment": {
229         "lines": [
230           {
231             "range": {
232               "end": {
233                 "character": 20,
234                 "line": 4
235               },
236               "start": {
237                 "character": 8,
238                 "line": 4
239               }
240             },
241             "text": "the b option"
242           }
243         ]
244       },
245       "identifier": {
246         "interfaceLanguage": "c",
247         "precise": "c:@U@Union@FI@b"
248       },
249       "kind": {
250         "displayName": "Instance Property",
251         "identifier": "c.property"
252       },
253       "location": {
254         "position": {
255           "character": 9,
256           "line": 5
257         },
258         "uri": "file://INPUT_DIR/input.h"
259       },
260       "names": {
261         "navigator": [
262           {
263             "kind": "identifier",
264             "spelling": "b"
265           }
266         ],
267         "subHeading": [
268           {
269             "kind": "identifier",
270             "spelling": "b"
271           }
272         ],
273         "title": "b"
274       },
275       "pathComponents": [
276         "Union",
277         "b"
278       ]
279     }
280   ]
281 }
282