xref: /llvm-project/clang/test/ExtractAPI/macro_undefined.c (revision e05c1b46d0d3739cc48ad912dbe6e9affce05927)
1529a0570SDaniel Grumberg // RUN: rm -rf %t
2529a0570SDaniel Grumberg // RUN: split-file %s %t
3e08c4354SZixu Wang // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \
4e08c4354SZixu Wang // RUN: %t/reference.output.json.in >> %t/reference.output.json
5*e05c1b46SDaniel Grumberg // RUN: %clang -extract-api --pretty-sgf --product-name=Macros -target arm64-apple-macosx \
6529a0570SDaniel Grumberg // RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s
7529a0570SDaniel Grumberg 
8529a0570SDaniel Grumberg // Generator version is not consistent across test runs, normalize it.
9529a0570SDaniel Grumberg // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \
10529a0570SDaniel Grumberg // RUN: %t/output.json >> %t/output-normalized.json
11529a0570SDaniel Grumberg // RUN: diff %t/reference.output.json %t/output-normalized.json
12529a0570SDaniel Grumberg 
13529a0570SDaniel Grumberg // CHECK-NOT: error:
14529a0570SDaniel Grumberg // CHECK-NOT: warning:
15529a0570SDaniel Grumberg 
16529a0570SDaniel Grumberg //--- input.h
17529a0570SDaniel Grumberg #define HELLO 1
18529a0570SDaniel Grumberg #define FUNC_GEN(NAME, ...) void NAME(__VA_ARGS__);
19529a0570SDaniel Grumberg FUNC_GEN(foo)
20529a0570SDaniel Grumberg FUNC_GEN(bar, const int *, unsigned);
21529a0570SDaniel Grumberg #undef FUNC_GEN
228b63622bSDaniel Grumberg // Undefining a not previously defined macro should not result in a crash.
238b63622bSDaniel Grumberg #undef FOO
24529a0570SDaniel Grumberg 
25529a0570SDaniel Grumberg //--- reference.output.json.in
26529a0570SDaniel Grumberg {
27529a0570SDaniel Grumberg   "metadata": {
28529a0570SDaniel Grumberg     "formatVersion": {
29529a0570SDaniel Grumberg       "major": 0,
30529a0570SDaniel Grumberg       "minor": 5,
31529a0570SDaniel Grumberg       "patch": 3
32529a0570SDaniel Grumberg     },
33529a0570SDaniel Grumberg     "generator": "?"
34529a0570SDaniel Grumberg   },
35529a0570SDaniel Grumberg   "module": {
36529a0570SDaniel Grumberg     "name": "Macros",
37529a0570SDaniel Grumberg     "platform": {
38529a0570SDaniel Grumberg       "architecture": "arm64",
39529a0570SDaniel Grumberg       "operatingSystem": {
40529a0570SDaniel Grumberg         "minimumVersion": {
41529a0570SDaniel Grumberg           "major": 11,
42529a0570SDaniel Grumberg           "minor": 0,
43529a0570SDaniel Grumberg           "patch": 0
44529a0570SDaniel Grumberg         },
45529a0570SDaniel Grumberg         "name": "macosx"
46529a0570SDaniel Grumberg       },
47529a0570SDaniel Grumberg       "vendor": "apple"
48529a0570SDaniel Grumberg     }
49529a0570SDaniel Grumberg   },
5028d79314SDaniel Grumberg   "relationships": [],
51529a0570SDaniel Grumberg   "symbols": [
52529a0570SDaniel Grumberg     {
5328d79314SDaniel Grumberg       "accessLevel": "public",
54529a0570SDaniel Grumberg       "declarationFragments": [
55529a0570SDaniel Grumberg         {
56529a0570SDaniel Grumberg           "kind": "typeIdentifier",
57529a0570SDaniel Grumberg           "preciseIdentifier": "c:v",
58529a0570SDaniel Grumberg           "spelling": "void"
59529a0570SDaniel Grumberg         },
60529a0570SDaniel Grumberg         {
61529a0570SDaniel Grumberg           "kind": "text",
62529a0570SDaniel Grumberg           "spelling": " "
63529a0570SDaniel Grumberg         },
64529a0570SDaniel Grumberg         {
65529a0570SDaniel Grumberg           "kind": "identifier",
66529a0570SDaniel Grumberg           "spelling": "foo"
67529a0570SDaniel Grumberg         },
68529a0570SDaniel Grumberg         {
69529a0570SDaniel Grumberg           "kind": "text",
7014805dcbSNagaChaitanya Vellanki           "spelling": "();"
71529a0570SDaniel Grumberg         }
72529a0570SDaniel Grumberg       ],
7328d79314SDaniel Grumberg       "functionSignature": {
7428d79314SDaniel Grumberg         "returns": [
7528d79314SDaniel Grumberg           {
7628d79314SDaniel Grumberg             "kind": "typeIdentifier",
7728d79314SDaniel Grumberg             "preciseIdentifier": "c:v",
7828d79314SDaniel Grumberg             "spelling": "void"
7928d79314SDaniel Grumberg           }
8028d79314SDaniel Grumberg         ]
8128d79314SDaniel Grumberg       },
82529a0570SDaniel Grumberg       "identifier": {
83529a0570SDaniel Grumberg         "interfaceLanguage": "objective-c",
84529a0570SDaniel Grumberg         "precise": "c:@F@foo"
85529a0570SDaniel Grumberg       },
86529a0570SDaniel Grumberg       "kind": {
87529a0570SDaniel Grumberg         "displayName": "Function",
88529a0570SDaniel Grumberg         "identifier": "objective-c.func"
89529a0570SDaniel Grumberg       },
90529a0570SDaniel Grumberg       "location": {
9128d79314SDaniel Grumberg         "position": {
9263537872SQuietMisdreavus           "character": 0,
9363537872SQuietMisdreavus           "line": 2
9428d79314SDaniel Grumberg         },
95529a0570SDaniel Grumberg         "uri": "file://INPUT_DIR/input.h"
96529a0570SDaniel Grumberg       },
97529a0570SDaniel Grumberg       "names": {
9880ae3665SDaniel Grumberg         "navigator": [
9980ae3665SDaniel Grumberg           {
10080ae3665SDaniel Grumberg             "kind": "identifier",
10180ae3665SDaniel Grumberg             "spelling": "foo"
10280ae3665SDaniel Grumberg           }
10380ae3665SDaniel Grumberg         ],
104529a0570SDaniel Grumberg         "subHeading": [
105529a0570SDaniel Grumberg           {
106529a0570SDaniel Grumberg             "kind": "identifier",
107529a0570SDaniel Grumberg             "spelling": "foo"
108529a0570SDaniel Grumberg           }
109529a0570SDaniel Grumberg         ],
110529a0570SDaniel Grumberg         "title": "foo"
111529a0570SDaniel Grumberg       },
11228d79314SDaniel Grumberg       "pathComponents": [
11328d79314SDaniel Grumberg         "foo"
114529a0570SDaniel Grumberg       ]
115529a0570SDaniel Grumberg     },
116529a0570SDaniel Grumberg     {
11728d79314SDaniel Grumberg       "accessLevel": "public",
118529a0570SDaniel Grumberg       "declarationFragments": [
119529a0570SDaniel Grumberg         {
120529a0570SDaniel Grumberg           "kind": "typeIdentifier",
121529a0570SDaniel Grumberg           "preciseIdentifier": "c:v",
122529a0570SDaniel Grumberg           "spelling": "void"
123529a0570SDaniel Grumberg         },
124529a0570SDaniel Grumberg         {
125529a0570SDaniel Grumberg           "kind": "text",
126529a0570SDaniel Grumberg           "spelling": " "
127529a0570SDaniel Grumberg         },
128529a0570SDaniel Grumberg         {
129529a0570SDaniel Grumberg           "kind": "identifier",
130529a0570SDaniel Grumberg           "spelling": "bar"
131529a0570SDaniel Grumberg         },
132529a0570SDaniel Grumberg         {
133529a0570SDaniel Grumberg           "kind": "text",
134529a0570SDaniel Grumberg           "spelling": "("
135529a0570SDaniel Grumberg         },
136529a0570SDaniel Grumberg         {
137529a0570SDaniel Grumberg           "kind": "keyword",
138529a0570SDaniel Grumberg           "spelling": "const"
139529a0570SDaniel Grumberg         },
140529a0570SDaniel Grumberg         {
141529a0570SDaniel Grumberg           "kind": "text",
142529a0570SDaniel Grumberg           "spelling": " "
143529a0570SDaniel Grumberg         },
144529a0570SDaniel Grumberg         {
145529a0570SDaniel Grumberg           "kind": "typeIdentifier",
146529a0570SDaniel Grumberg           "preciseIdentifier": "c:I",
147529a0570SDaniel Grumberg           "spelling": "int"
148529a0570SDaniel Grumberg         },
149529a0570SDaniel Grumberg         {
150529a0570SDaniel Grumberg           "kind": "text",
151529a0570SDaniel Grumberg           "spelling": " * "
152529a0570SDaniel Grumberg         },
153529a0570SDaniel Grumberg         {
154529a0570SDaniel Grumberg           "kind": "internalParam",
155529a0570SDaniel Grumberg           "spelling": ""
156529a0570SDaniel Grumberg         },
157529a0570SDaniel Grumberg         {
158529a0570SDaniel Grumberg           "kind": "text",
159529a0570SDaniel Grumberg           "spelling": ", "
160529a0570SDaniel Grumberg         },
161529a0570SDaniel Grumberg         {
162529a0570SDaniel Grumberg           "kind": "typeIdentifier",
163529a0570SDaniel Grumberg           "preciseIdentifier": "c:i",
164529a0570SDaniel Grumberg           "spelling": "unsigned int"
165529a0570SDaniel Grumberg         },
166529a0570SDaniel Grumberg         {
167529a0570SDaniel Grumberg           "kind": "text",
168529a0570SDaniel Grumberg           "spelling": " "
169529a0570SDaniel Grumberg         },
170529a0570SDaniel Grumberg         {
171529a0570SDaniel Grumberg           "kind": "internalParam",
172529a0570SDaniel Grumberg           "spelling": ""
173529a0570SDaniel Grumberg         },
174529a0570SDaniel Grumberg         {
175529a0570SDaniel Grumberg           "kind": "text",
17614805dcbSNagaChaitanya Vellanki           "spelling": ");"
177529a0570SDaniel Grumberg         }
178529a0570SDaniel Grumberg       ],
17928d79314SDaniel Grumberg       "functionSignature": {
180529a0570SDaniel Grumberg         "parameters": [
181529a0570SDaniel Grumberg           {
182529a0570SDaniel Grumberg             "declarationFragments": [
183529a0570SDaniel Grumberg               {
184529a0570SDaniel Grumberg                 "kind": "keyword",
185529a0570SDaniel Grumberg                 "spelling": "const"
186529a0570SDaniel Grumberg               },
187529a0570SDaniel Grumberg               {
188529a0570SDaniel Grumberg                 "kind": "text",
189529a0570SDaniel Grumberg                 "spelling": " "
190529a0570SDaniel Grumberg               },
191529a0570SDaniel Grumberg               {
192529a0570SDaniel Grumberg                 "kind": "typeIdentifier",
193529a0570SDaniel Grumberg                 "preciseIdentifier": "c:I",
194529a0570SDaniel Grumberg                 "spelling": "int"
195529a0570SDaniel Grumberg               },
196529a0570SDaniel Grumberg               {
197529a0570SDaniel Grumberg                 "kind": "text",
198529a0570SDaniel Grumberg                 "spelling": " * "
199529a0570SDaniel Grumberg               },
200529a0570SDaniel Grumberg               {
201529a0570SDaniel Grumberg                 "kind": "internalParam",
202529a0570SDaniel Grumberg                 "spelling": ""
203529a0570SDaniel Grumberg               }
204529a0570SDaniel Grumberg             ],
205529a0570SDaniel Grumberg             "name": ""
206529a0570SDaniel Grumberg           },
207529a0570SDaniel Grumberg           {
208529a0570SDaniel Grumberg             "declarationFragments": [
209529a0570SDaniel Grumberg               {
210529a0570SDaniel Grumberg                 "kind": "typeIdentifier",
211529a0570SDaniel Grumberg                 "preciseIdentifier": "c:i",
212529a0570SDaniel Grumberg                 "spelling": "unsigned int"
213529a0570SDaniel Grumberg               },
214529a0570SDaniel Grumberg               {
215529a0570SDaniel Grumberg                 "kind": "text",
216529a0570SDaniel Grumberg                 "spelling": " "
217529a0570SDaniel Grumberg               },
218529a0570SDaniel Grumberg               {
219529a0570SDaniel Grumberg                 "kind": "internalParam",
220529a0570SDaniel Grumberg                 "spelling": ""
221529a0570SDaniel Grumberg               }
222529a0570SDaniel Grumberg             ],
223529a0570SDaniel Grumberg             "name": ""
224529a0570SDaniel Grumberg           }
225529a0570SDaniel Grumberg         ],
226529a0570SDaniel Grumberg         "returns": [
227529a0570SDaniel Grumberg           {
228529a0570SDaniel Grumberg             "kind": "typeIdentifier",
229529a0570SDaniel Grumberg             "preciseIdentifier": "c:v",
230529a0570SDaniel Grumberg             "spelling": "void"
231529a0570SDaniel Grumberg           }
232529a0570SDaniel Grumberg         ]
23328d79314SDaniel Grumberg       },
23428d79314SDaniel Grumberg       "identifier": {
23528d79314SDaniel Grumberg         "interfaceLanguage": "objective-c",
23628d79314SDaniel Grumberg         "precise": "c:@F@bar"
23728d79314SDaniel Grumberg       },
23828d79314SDaniel Grumberg       "kind": {
23928d79314SDaniel Grumberg         "displayName": "Function",
24028d79314SDaniel Grumberg         "identifier": "objective-c.func"
24128d79314SDaniel Grumberg       },
24228d79314SDaniel Grumberg       "location": {
24328d79314SDaniel Grumberg         "position": {
24463537872SQuietMisdreavus           "character": 0,
24563537872SQuietMisdreavus           "line": 3
24628d79314SDaniel Grumberg         },
24728d79314SDaniel Grumberg         "uri": "file://INPUT_DIR/input.h"
24828d79314SDaniel Grumberg       },
24928d79314SDaniel Grumberg       "names": {
25080ae3665SDaniel Grumberg         "navigator": [
25180ae3665SDaniel Grumberg           {
25280ae3665SDaniel Grumberg             "kind": "identifier",
25380ae3665SDaniel Grumberg             "spelling": "bar"
25480ae3665SDaniel Grumberg           }
25580ae3665SDaniel Grumberg         ],
25628d79314SDaniel Grumberg         "subHeading": [
25728d79314SDaniel Grumberg           {
25828d79314SDaniel Grumberg             "kind": "identifier",
25928d79314SDaniel Grumberg             "spelling": "bar"
260529a0570SDaniel Grumberg           }
26128d79314SDaniel Grumberg         ],
26228d79314SDaniel Grumberg         "title": "bar"
26328d79314SDaniel Grumberg       },
26428d79314SDaniel Grumberg       "pathComponents": [
26528d79314SDaniel Grumberg         "bar"
26628d79314SDaniel Grumberg       ]
267529a0570SDaniel Grumberg     },
268529a0570SDaniel Grumberg     {
26928d79314SDaniel Grumberg       "accessLevel": "public",
270529a0570SDaniel Grumberg       "declarationFragments": [
271529a0570SDaniel Grumberg         {
272529a0570SDaniel Grumberg           "kind": "keyword",
273529a0570SDaniel Grumberg           "spelling": "#define"
274529a0570SDaniel Grumberg         },
275529a0570SDaniel Grumberg         {
276529a0570SDaniel Grumberg           "kind": "text",
277529a0570SDaniel Grumberg           "spelling": " "
278529a0570SDaniel Grumberg         },
279529a0570SDaniel Grumberg         {
280529a0570SDaniel Grumberg           "kind": "identifier",
281529a0570SDaniel Grumberg           "spelling": "HELLO"
282529a0570SDaniel Grumberg         }
283529a0570SDaniel Grumberg       ],
284529a0570SDaniel Grumberg       "identifier": {
285529a0570SDaniel Grumberg         "interfaceLanguage": "objective-c",
286529a0570SDaniel Grumberg         "precise": "c:input.h@8@macro@HELLO"
287529a0570SDaniel Grumberg       },
288529a0570SDaniel Grumberg       "kind": {
289529a0570SDaniel Grumberg         "displayName": "Macro",
290529a0570SDaniel Grumberg         "identifier": "objective-c.macro"
291529a0570SDaniel Grumberg       },
292529a0570SDaniel Grumberg       "location": {
29328d79314SDaniel Grumberg         "position": {
29463537872SQuietMisdreavus           "character": 8,
29563537872SQuietMisdreavus           "line": 0
29628d79314SDaniel Grumberg         },
297529a0570SDaniel Grumberg         "uri": "file://INPUT_DIR/input.h"
298529a0570SDaniel Grumberg       },
299529a0570SDaniel Grumberg       "names": {
30080ae3665SDaniel Grumberg         "navigator": [
30180ae3665SDaniel Grumberg           {
30280ae3665SDaniel Grumberg             "kind": "identifier",
30380ae3665SDaniel Grumberg             "spelling": "HELLO"
30480ae3665SDaniel Grumberg           }
30580ae3665SDaniel Grumberg         ],
306529a0570SDaniel Grumberg         "subHeading": [
307529a0570SDaniel Grumberg           {
308529a0570SDaniel Grumberg             "kind": "identifier",
309529a0570SDaniel Grumberg             "spelling": "HELLO"
310529a0570SDaniel Grumberg           }
311529a0570SDaniel Grumberg         ],
312529a0570SDaniel Grumberg         "title": "HELLO"
31328d79314SDaniel Grumberg       },
31428d79314SDaniel Grumberg       "pathComponents": [
31528d79314SDaniel Grumberg         "HELLO"
31628d79314SDaniel Grumberg       ]
317529a0570SDaniel Grumberg     }
318529a0570SDaniel Grumberg   ]
319529a0570SDaniel Grumberg }
320