1 // RUN: rm -rf %t 2 // RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing --product-name=Macros -triple arm64-apple-macosx \ 3 // RUN: -isystem %S -x objective-c-header %s -o %t/output.symbols.json 4 5 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix HELLO 6 #define HELLO 1 7 // HELLO-LABEL: "!testLabel": "c:@macro@HELLO" 8 // HELLO: "accessLevel": "public", 9 // HELLO-NEXT: "declarationFragments": [ 10 // HELLO-NEXT: { 11 // HELLO-NEXT: "kind": "keyword", 12 // HELLO-NEXT: "spelling": "#define" 13 // HELLO-NEXT: }, 14 // HELLO-NEXT: { 15 // HELLO-NEXT: "kind": "text", 16 // HELLO-NEXT: "spelling": " " 17 // HELLO-NEXT: }, 18 // HELLO-NEXT: { 19 // HELLO-NEXT: "kind": "identifier", 20 // HELLO-NEXT: "spelling": "HELLO" 21 // HELLO-NEXT: } 22 // HELLO-NEXT: ], 23 // HELLO: "kind": { 24 // HELLO-NEXT: "displayName": "Macro", 25 // HELLO-NEXT: "identifier": "objective-c.macro" 26 // HELLO-NEXT: }, 27 // HELLO-NEXT: "location": { 28 // HELLO-NEXT: "position": { 29 // HELLO-NEXT: "character": 8, 30 // HELLO-NEXT: "line": [[# @LINE - 25]] 31 // HELLO-NEXT: }, 32 // HELLO-NEXT: "uri": "file://{{.*}}/macros.c" 33 // HELLO-NEXT: }, 34 // HELLO-NEXT: "names": { 35 // HELLO-NEXT: "navigator": [ 36 // HELLO-NEXT: { 37 // HELLO-NEXT: "kind": "identifier", 38 // HELLO-NEXT: "spelling": "HELLO" 39 // HELLO-NEXT: } 40 // HELLO-NEXT: ], 41 // HELLO-NEXT: "subHeading": [ 42 // HELLO-NEXT: { 43 // HELLO-NEXT: "kind": "identifier", 44 // HELLO-NEXT: "spelling": "HELLO" 45 // HELLO-NEXT: } 46 // HELLO-NEXT: ], 47 // HELLO-NEXT: "title": "HELLO" 48 // HELLO-NEXT: }, 49 // HELLO-NEXT: "pathComponents": [ 50 // HELLO-NEXT: "HELLO" 51 // HELLO-NEXT: ] 52 53 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix WORLD 54 #define WORLD 2 55 // WORLD-LABEL: "!testLabel": "c:@macro@WORLD" 56 // WORLD: "accessLevel": "public", 57 // WORLD-NEXT: "declarationFragments": [ 58 // WORLD-NEXT: { 59 // WORLD-NEXT: "kind": "keyword", 60 // WORLD-NEXT: "spelling": "#define" 61 // WORLD-NEXT: }, 62 // WORLD-NEXT: { 63 // WORLD-NEXT: "kind": "text", 64 // WORLD-NEXT: "spelling": " " 65 // WORLD-NEXT: }, 66 // WORLD-NEXT: { 67 // WORLD-NEXT: "kind": "identifier", 68 // WORLD-NEXT: "spelling": "WORLD" 69 // WORLD-NEXT: } 70 // WORLD-NEXT: ], 71 // WORLD: "kind": { 72 // WORLD-NEXT: "displayName": "Macro", 73 // WORLD-NEXT: "identifier": "objective-c.macro" 74 // WORLD-NEXT: }, 75 // WORLD-NEXT: "location": { 76 // WORLD-NEXT: "position": { 77 // WORLD-NEXT: "character": 8, 78 // WORLD-NEXT: "line": [[# @LINE - 25]] 79 // WORLD-NEXT: }, 80 // WORLD-NEXT: "uri": "file://{{.*}}/macros.c" 81 // WORLD-NEXT: }, 82 // WORLD-NEXT: "names": { 83 // WORLD-NEXT: "navigator": [ 84 // WORLD-NEXT: { 85 // WORLD-NEXT: "kind": "identifier", 86 // WORLD-NEXT: "spelling": "WORLD" 87 // WORLD-NEXT: } 88 // WORLD-NEXT: ], 89 // WORLD-NEXT: "subHeading": [ 90 // WORLD-NEXT: { 91 // WORLD-NEXT: "kind": "identifier", 92 // WORLD-NEXT: "spelling": "WORLD" 93 // WORLD-NEXT: } 94 // WORLD-NEXT: ], 95 // WORLD-NEXT: "title": "WORLD" 96 // WORLD-NEXT: }, 97 // WORLD-NEXT: "pathComponents": [ 98 // WORLD-NEXT: "WORLD" 99 // WORLD-NEXT: ] 100 101 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MACRO_FUN 102 #define MACRO_FUN(x) x x 103 // MACRO_FUN-LABEL: "!testLabel": "c:@macro@MACRO_FUN" 104 // MACRO_FUN-NEXT: "accessLevel": "public", 105 // MACRO_FUN-NEXT: "declarationFragments": [ 106 // MACRO_FUN-NEXT: { 107 // MACRO_FUN-NEXT: "kind": "keyword", 108 // MACRO_FUN-NEXT: "spelling": "#define" 109 // MACRO_FUN-NEXT: }, 110 // MACRO_FUN-NEXT: { 111 // MACRO_FUN-NEXT: "kind": "text", 112 // MACRO_FUN-NEXT: "spelling": " " 113 // MACRO_FUN-NEXT: }, 114 // MACRO_FUN-NEXT: { 115 // MACRO_FUN-NEXT: "kind": "identifier", 116 // MACRO_FUN-NEXT: "spelling": "MACRO_FUN" 117 // MACRO_FUN-NEXT: }, 118 // MACRO_FUN-NEXT: { 119 // MACRO_FUN-NEXT: "kind": "text", 120 // MACRO_FUN-NEXT: "spelling": "(" 121 // MACRO_FUN-NEXT: }, 122 // MACRO_FUN-NEXT: { 123 // MACRO_FUN-NEXT: "kind": "internalParam", 124 // MACRO_FUN-NEXT: "spelling": "x" 125 // MACRO_FUN-NEXT: }, 126 // MACRO_FUN-NEXT: { 127 // MACRO_FUN-NEXT: "kind": "text", 128 // MACRO_FUN-NEXT: "spelling": ")" 129 // MACRO_FUN-NEXT: } 130 // MACRO_FUN-NEXT: ], 131 // MACRO_FUN: "kind": { 132 // MACRO_FUN-NEXT: "displayName": "Macro", 133 // MACRO_FUN-NEXT: "identifier": "objective-c.macro" 134 // MACRO_FUN-NEXT: }, 135 // MACRO_FUN-NEXT: "location": { 136 // MACRO_FUN-NEXT: "position": { 137 // MACRO_FUN-NEXT: "character": 8, 138 // MACRO_FUN-NEXT: "line": [[# @LINE - 37]] 139 // MACRO_FUN-NEXT: }, 140 // MACRO_FUN-NEXT: "uri": "file://{{.*}}/macros.c" 141 // MACRO_FUN-NEXT: }, 142 // MACRO_FUN-NEXT: "names": { 143 // MACRO_FUN-NEXT: "navigator": [ 144 // MACRO_FUN-NEXT: { 145 // MACRO_FUN-NEXT: "kind": "identifier", 146 // MACRO_FUN-NEXT: "spelling": "MACRO_FUN" 147 // MACRO_FUN-NEXT: } 148 // MACRO_FUN-NEXT: ], 149 // MACRO_FUN-NEXT: "subHeading": [ 150 // MACRO_FUN-NEXT: { 151 // MACRO_FUN-NEXT: "kind": "identifier", 152 // MACRO_FUN-NEXT: "spelling": "MACRO_FUN" 153 // MACRO_FUN-NEXT: } 154 // MACRO_FUN-NEXT: ], 155 // MACRO_FUN-NEXT: "title": "MACRO_FUN" 156 // MACRO_FUN-NEXT: }, 157 // MACRO_FUN-NEXT: "pathComponents": [ 158 // MACRO_FUN-NEXT: "MACRO_FUN" 159 // MACRO_FUN-NEXT: ] 160 161 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUN 162 #define FUN(x, y, z) x + y + z 163 // FUN-LABEL: "!testLabel": "c:@macro@FUN" 164 // FUN-NEXT: "accessLevel": "public", 165 // FUN-NEXT: "declarationFragments": [ 166 // FUN-NEXT: { 167 // FUN-NEXT: "kind": "keyword", 168 // FUN-NEXT: "spelling": "#define" 169 // FUN-NEXT: }, 170 // FUN-NEXT: { 171 // FUN-NEXT: "kind": "text", 172 // FUN-NEXT: "spelling": " " 173 // FUN-NEXT: }, 174 // FUN-NEXT: { 175 // FUN-NEXT: "kind": "identifier", 176 // FUN-NEXT: "spelling": "FUN" 177 // FUN-NEXT: }, 178 // FUN-NEXT: { 179 // FUN-NEXT: "kind": "text", 180 // FUN-NEXT: "spelling": "(" 181 // FUN-NEXT: }, 182 // FUN-NEXT: { 183 // FUN-NEXT: "kind": "internalParam", 184 // FUN-NEXT: "spelling": "x" 185 // FUN-NEXT: }, 186 // FUN-NEXT: { 187 // FUN-NEXT: "kind": "text", 188 // FUN-NEXT: "spelling": ", " 189 // FUN-NEXT: }, 190 // FUN-NEXT: { 191 // FUN-NEXT: "kind": "internalParam", 192 // FUN-NEXT: "spelling": "y" 193 // FUN-NEXT: }, 194 // FUN-NEXT: { 195 // FUN-NEXT: "kind": "text", 196 // FUN-NEXT: "spelling": ", " 197 // FUN-NEXT: }, 198 // FUN-NEXT: { 199 // FUN-NEXT: "kind": "internalParam", 200 // FUN-NEXT: "spelling": "z" 201 // FUN-NEXT: }, 202 // FUN-NEXT: { 203 // FUN-NEXT: "kind": "text", 204 // FUN-NEXT: "spelling": ")" 205 // FUN-NEXT: } 206 // FUN-NEXT: ], 207 // FUN: "kind": { 208 // FUN-NEXT: "displayName": "Macro", 209 // FUN-NEXT: "identifier": "objective-c.macro" 210 // FUN-NEXT: }, 211 // FUN-NEXT: "location": { 212 // FUN-NEXT: "position": { 213 // FUN-NEXT: "character": 8, 214 // FUN-NEXT: "line": [[# @LINE - 53]] 215 // FUN-NEXT: }, 216 // FUN-NEXT: "uri": "file://{{.*}}/macros.c" 217 // FUN-NEXT: }, 218 // FUN-NEXT: "names": { 219 // FUN-NEXT: "navigator": [ 220 // FUN-NEXT: { 221 // FUN-NEXT: "kind": "identifier", 222 // FUN-NEXT: "spelling": "FUN" 223 // FUN-NEXT: } 224 // FUN-NEXT: ], 225 // FUN-NEXT: "subHeading": [ 226 // FUN-NEXT: { 227 // FUN-NEXT: "kind": "identifier", 228 // FUN-NEXT: "spelling": "FUN" 229 // FUN-NEXT: } 230 // FUN-NEXT: ], 231 // FUN-NEXT: "title": "FUN" 232 // FUN-NEXT: }, 233 // FUN-NEXT: "pathComponents": [ 234 // FUN-NEXT: "FUN" 235 // FUN-NEXT: ] 236 237 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNC99 238 #define FUNC99(x, ...) 239 // FUNC99-LABEL: "!testLabel": "c:@macro@FUNC99" 240 // FUNC99-NEXT: "accessLevel": "public", 241 // FUNC99-NEXT: "declarationFragments": [ 242 // FUNC99-NEXT: { 243 // FUNC99-NEXT: "kind": "keyword", 244 // FUNC99-NEXT: "spelling": "#define" 245 // FUNC99-NEXT: }, 246 // FUNC99-NEXT: { 247 // FUNC99-NEXT: "kind": "text", 248 // FUNC99-NEXT: "spelling": " " 249 // FUNC99-NEXT: }, 250 // FUNC99-NEXT: { 251 // FUNC99-NEXT: "kind": "identifier", 252 // FUNC99-NEXT: "spelling": "FUNC99" 253 // FUNC99-NEXT: }, 254 // FUNC99-NEXT: { 255 // FUNC99-NEXT: "kind": "text", 256 // FUNC99-NEXT: "spelling": "(" 257 // FUNC99-NEXT: }, 258 // FUNC99-NEXT: { 259 // FUNC99-NEXT: "kind": "internalParam", 260 // FUNC99-NEXT: "spelling": "x" 261 // FUNC99-NEXT: }, 262 // FUNC99-NEXT: { 263 // FUNC99-NEXT: "kind": "text", 264 // FUNC99-NEXT: "spelling": ", ...)" 265 // FUNC99-NEXT: } 266 // FUNC99-NEXT: ], 267 // FUNC99: "kind": { 268 // FUNC99-NEXT: "displayName": "Macro", 269 // FUNC99-NEXT: "identifier": "objective-c.macro" 270 // FUNC99-NEXT: }, 271 // FUNC99-NEXT: "location": { 272 // FUNC99-NEXT: "position": { 273 // FUNC99-NEXT: "character": 8, 274 // FUNC99-NEXT: "line": [[# @LINE - 37]] 275 // FUNC99-NEXT: }, 276 // FUNC99-NEXT: "uri": "file://{{.*}}/macros.c" 277 // FUNC99-NEXT: }, 278 // FUNC99-NEXT: "names": { 279 // FUNC99-NEXT: "navigator": [ 280 // FUNC99-NEXT: { 281 // FUNC99-NEXT: "kind": "identifier", 282 // FUNC99-NEXT: "spelling": "FUNC99" 283 // FUNC99-NEXT: } 284 // FUNC99-NEXT: ], 285 // FUNC99-NEXT: "subHeading": [ 286 // FUNC99-NEXT: { 287 // FUNC99-NEXT: "kind": "identifier", 288 // FUNC99-NEXT: "spelling": "FUNC99" 289 // FUNC99-NEXT: } 290 // FUNC99-NEXT: ], 291 // FUNC99-NEXT: "title": "FUNC99" 292 // FUNC99-NEXT: }, 293 // FUNC99-NEXT: "pathComponents": [ 294 // FUNC99-NEXT: "FUNC99" 295 // FUNC99-NEXT: ] 296 297 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNGNU 298 #define FUNGNU(x...) 299 // FUNGNU-LABEL: "!testLabel": "c:@macro@FUNGNU" 300 // FUNGNU-NEXT: "accessLevel": "public", 301 // FUNGNU-NEXT: "declarationFragments": [ 302 // FUNGNU-NEXT: { 303 // FUNGNU-NEXT: "kind": "keyword", 304 // FUNGNU-NEXT: "spelling": "#define" 305 // FUNGNU-NEXT: }, 306 // FUNGNU-NEXT: { 307 // FUNGNU-NEXT: "kind": "text", 308 // FUNGNU-NEXT: "spelling": " " 309 // FUNGNU-NEXT: }, 310 // FUNGNU-NEXT: { 311 // FUNGNU-NEXT: "kind": "identifier", 312 // FUNGNU-NEXT: "spelling": "FUNGNU" 313 // FUNGNU-NEXT: }, 314 // FUNGNU-NEXT: { 315 // FUNGNU-NEXT: "kind": "text", 316 // FUNGNU-NEXT: "spelling": "(" 317 // FUNGNU-NEXT: }, 318 // FUNGNU-NEXT: { 319 // FUNGNU-NEXT: "kind": "internalParam", 320 // FUNGNU-NEXT: "spelling": "x" 321 // FUNGNU-NEXT: }, 322 // FUNGNU-NEXT: { 323 // FUNGNU-NEXT: "kind": "text", 324 // FUNGNU-NEXT: "spelling": "...)" 325 // FUNGNU-NEXT: } 326 // FUNGNU-NEXT: ], 327 // FUNGNU: "kind": { 328 // FUNGNU-NEXT: "displayName": "Macro", 329 // FUNGNU-NEXT: "identifier": "objective-c.macro" 330 // FUNGNU-NEXT: }, 331 // FUNGNU-NEXT: "location": { 332 // FUNGNU-NEXT: "position": { 333 // FUNGNU-NEXT: "character": 8, 334 // FUNGNU-NEXT: "line": [[# @LINE - 37]] 335 // FUNGNU-NEXT: }, 336 // FUNGNU-NEXT: "uri": "file://{{.*}}/macros.c" 337 // FUNGNU-NEXT: }, 338 // FUNGNU-NEXT: "names": { 339 // FUNGNU-NEXT: "navigator": [ 340 // FUNGNU-NEXT: { 341 // FUNGNU-NEXT: "kind": "identifier", 342 // FUNGNU-NEXT: "spelling": "FUNGNU" 343 // FUNGNU-NEXT: } 344 // FUNGNU-NEXT: ], 345 // FUNGNU-NEXT: "subHeading": [ 346 // FUNGNU-NEXT: { 347 // FUNGNU-NEXT: "kind": "identifier", 348 // FUNGNU-NEXT: "spelling": "FUNGNU" 349 // FUNGNU-NEXT: } 350 // FUNGNU-NEXT: ], 351 // FUNGNU-NEXT: "title": "FUNGNU" 352 // FUNGNU-NEXT: }, 353 // FUNGNU-NEXT: "pathComponents": [ 354 // FUNGNU-NEXT: "FUNGNU" 355 // FUNGNU-NEXT: ] 356 357 // expected-no-diagnostics 358 359