xref: /llvm-project/clang/test/ExtractAPI/macro_undefined.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 -extract-api --pretty-sgf --product-name=Macros -target arm64-apple-macosx \
6 // RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s
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 // CHECK-NOT: error:
14 // CHECK-NOT: warning:
15 
16 //--- input.h
17 #define HELLO 1
18 #define FUNC_GEN(NAME, ...) void NAME(__VA_ARGS__);
19 FUNC_GEN(foo)
20 FUNC_GEN(bar, const int *, unsigned);
21 #undef FUNC_GEN
22 // Undefining a not previously defined macro should not result in a crash.
23 #undef FOO
24 
25 //--- reference.output.json.in
26 {
27   "metadata": {
28     "formatVersion": {
29       "major": 0,
30       "minor": 5,
31       "patch": 3
32     },
33     "generator": "?"
34   },
35   "module": {
36     "name": "Macros",
37     "platform": {
38       "architecture": "arm64",
39       "operatingSystem": {
40         "minimumVersion": {
41           "major": 11,
42           "minor": 0,
43           "patch": 0
44         },
45         "name": "macosx"
46       },
47       "vendor": "apple"
48     }
49   },
50   "relationships": [],
51   "symbols": [
52     {
53       "accessLevel": "public",
54       "declarationFragments": [
55         {
56           "kind": "typeIdentifier",
57           "preciseIdentifier": "c:v",
58           "spelling": "void"
59         },
60         {
61           "kind": "text",
62           "spelling": " "
63         },
64         {
65           "kind": "identifier",
66           "spelling": "foo"
67         },
68         {
69           "kind": "text",
70           "spelling": "();"
71         }
72       ],
73       "functionSignature": {
74         "returns": [
75           {
76             "kind": "typeIdentifier",
77             "preciseIdentifier": "c:v",
78             "spelling": "void"
79           }
80         ]
81       },
82       "identifier": {
83         "interfaceLanguage": "objective-c",
84         "precise": "c:@F@foo"
85       },
86       "kind": {
87         "displayName": "Function",
88         "identifier": "objective-c.func"
89       },
90       "location": {
91         "position": {
92           "character": 0,
93           "line": 2
94         },
95         "uri": "file://INPUT_DIR/input.h"
96       },
97       "names": {
98         "navigator": [
99           {
100             "kind": "identifier",
101             "spelling": "foo"
102           }
103         ],
104         "subHeading": [
105           {
106             "kind": "identifier",
107             "spelling": "foo"
108           }
109         ],
110         "title": "foo"
111       },
112       "pathComponents": [
113         "foo"
114       ]
115     },
116     {
117       "accessLevel": "public",
118       "declarationFragments": [
119         {
120           "kind": "typeIdentifier",
121           "preciseIdentifier": "c:v",
122           "spelling": "void"
123         },
124         {
125           "kind": "text",
126           "spelling": " "
127         },
128         {
129           "kind": "identifier",
130           "spelling": "bar"
131         },
132         {
133           "kind": "text",
134           "spelling": "("
135         },
136         {
137           "kind": "keyword",
138           "spelling": "const"
139         },
140         {
141           "kind": "text",
142           "spelling": " "
143         },
144         {
145           "kind": "typeIdentifier",
146           "preciseIdentifier": "c:I",
147           "spelling": "int"
148         },
149         {
150           "kind": "text",
151           "spelling": " * "
152         },
153         {
154           "kind": "internalParam",
155           "spelling": ""
156         },
157         {
158           "kind": "text",
159           "spelling": ", "
160         },
161         {
162           "kind": "typeIdentifier",
163           "preciseIdentifier": "c:i",
164           "spelling": "unsigned int"
165         },
166         {
167           "kind": "text",
168           "spelling": " "
169         },
170         {
171           "kind": "internalParam",
172           "spelling": ""
173         },
174         {
175           "kind": "text",
176           "spelling": ");"
177         }
178       ],
179       "functionSignature": {
180         "parameters": [
181           {
182             "declarationFragments": [
183               {
184                 "kind": "keyword",
185                 "spelling": "const"
186               },
187               {
188                 "kind": "text",
189                 "spelling": " "
190               },
191               {
192                 "kind": "typeIdentifier",
193                 "preciseIdentifier": "c:I",
194                 "spelling": "int"
195               },
196               {
197                 "kind": "text",
198                 "spelling": " * "
199               },
200               {
201                 "kind": "internalParam",
202                 "spelling": ""
203               }
204             ],
205             "name": ""
206           },
207           {
208             "declarationFragments": [
209               {
210                 "kind": "typeIdentifier",
211                 "preciseIdentifier": "c:i",
212                 "spelling": "unsigned int"
213               },
214               {
215                 "kind": "text",
216                 "spelling": " "
217               },
218               {
219                 "kind": "internalParam",
220                 "spelling": ""
221               }
222             ],
223             "name": ""
224           }
225         ],
226         "returns": [
227           {
228             "kind": "typeIdentifier",
229             "preciseIdentifier": "c:v",
230             "spelling": "void"
231           }
232         ]
233       },
234       "identifier": {
235         "interfaceLanguage": "objective-c",
236         "precise": "c:@F@bar"
237       },
238       "kind": {
239         "displayName": "Function",
240         "identifier": "objective-c.func"
241       },
242       "location": {
243         "position": {
244           "character": 0,
245           "line": 3
246         },
247         "uri": "file://INPUT_DIR/input.h"
248       },
249       "names": {
250         "navigator": [
251           {
252             "kind": "identifier",
253             "spelling": "bar"
254           }
255         ],
256         "subHeading": [
257           {
258             "kind": "identifier",
259             "spelling": "bar"
260           }
261         ],
262         "title": "bar"
263       },
264       "pathComponents": [
265         "bar"
266       ]
267     },
268     {
269       "accessLevel": "public",
270       "declarationFragments": [
271         {
272           "kind": "keyword",
273           "spelling": "#define"
274         },
275         {
276           "kind": "text",
277           "spelling": " "
278         },
279         {
280           "kind": "identifier",
281           "spelling": "HELLO"
282         }
283       ],
284       "identifier": {
285         "interfaceLanguage": "objective-c",
286         "precise": "c:input.h@8@macro@HELLO"
287       },
288       "kind": {
289         "displayName": "Macro",
290         "identifier": "objective-c.macro"
291       },
292       "location": {
293         "position": {
294           "character": 8,
295           "line": 0
296         },
297         "uri": "file://INPUT_DIR/input.h"
298       },
299       "names": {
300         "navigator": [
301           {
302             "kind": "identifier",
303             "spelling": "HELLO"
304           }
305         ],
306         "subHeading": [
307           {
308             "kind": "identifier",
309             "spelling": "HELLO"
310           }
311         ],
312         "title": "HELLO"
313       },
314       "pathComponents": [
315         "HELLO"
316       ]
317     }
318   ]
319 }
320